2014-04-22 17 views
2

我想使用一個特定的時間段後其PID殺死一個過程,即,如果該過程保持運行超過10分鐘,我要調用一個方法來殺死一個進程它。殺死利用其PID在紅寶石

我有兩個問題:第一,我無法管理殺的過程中,我使用:

Process.kill('INT', pid) 

但錯誤不斷出現像Bad file descriptor,或unsupported name 'SIGQUIT'當我使用QUIT信號,而不是INT

其次,我怎麼做10分鐘定時之前,我打電話給殺死進程的方法是什麼?

謝謝。

+0

可能使用'Process.kill'SIGKILL',pid'來代替(INT是爲了發送ctrl + c,我不知道它的實現是否工作... https://github.com/ruby/ruby /blob/cc934fc31c221225584d8b33c1f4975fe39c4637/win32/win32.c#L4513) – rogerdpack

回答

1

對於你的時間,你可以使用一個線程:

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? 

我不確定爲什麼要放棄工作不適合你。我無法複製你的錯誤。

+0

感謝您的回答Max,但只要Process.kill('QUIT',pid)不起作用,我仍然無法使用此解決方案,錯誤說不受支持的名稱「SIGQUIT」。 – user3415827

+1

所以最後我用系統( 「TASKKILL/IM PID/F/T> NUL 2>&1」),而不是Process.kill( '退出',PID),以及你的答案是正是我需要的。 提出Signal.list: – user3415827

+0

你可以得到什麼信號的列表與支持 – genegc