我想使用一個特定的時間段後其PID殺死一個過程,即,如果該過程保持運行超過10分鐘,我要調用一個方法來殺死一個進程它。殺死利用其PID在紅寶石
我有兩個問題:第一,我無法管理殺的過程中,我使用:
Process.kill('INT', pid)
但錯誤不斷出現像Bad file descriptor
,或unsupported name 'SIGQUIT'
當我使用QUIT
信號,而不是INT
。
其次,我怎麼做10分鐘定時之前,我打電話給殺死進程的方法是什麼?
謝謝。
我想使用一個特定的時間段後其PID殺死一個過程,即,如果該過程保持運行超過10分鐘,我要調用一個方法來殺死一個進程它。殺死利用其PID在紅寶石
我有兩個問題:第一,我無法管理殺的過程中,我使用:
Process.kill('INT', pid)
但錯誤不斷出現像Bad file descriptor
,或unsupported name 'SIGQUIT'
當我使用QUIT
信號,而不是INT
。
其次,我怎麼做10分鐘定時之前,我打電話給殺死進程的方法是什麼?
謝謝。
對於你的時間,你可以使用一個線程:
Thread.new do
sleep 10 * 60
begin
Process.kill('QUIT', pid)
rescue Errno::ESRCH
# process exited normally
end
end
_, status = Process.wait2 pid
puts status.exited?
我不確定爲什麼要放棄工作不適合你。我無法複製你的錯誤。
感謝您的回答Max,但只要Process.kill('QUIT',pid)不起作用,我仍然無法使用此解決方案,錯誤說不受支持的名稱「SIGQUIT」。 – user3415827
所以最後我用系統( 「TASKKILL/IM PID/F/T> NUL 2>&1」),而不是Process.kill( '退出',PID),以及你的答案是正是我需要的。 提出Signal.list: – user3415827
你可以得到什麼信號的列表與支持 – genegc
可能使用'Process.kill'SIGKILL',pid'來代替(INT是爲了發送ctrl + c,我不知道它的實現是否工作... https://github.com/ruby/ruby /blob/cc934fc31c221225584d8b33c1f4975fe39c4637/win32/win32.c#L4513) – rogerdpack