以下代碼會分叉主進程並在反引號中運行命令。腳本結尾處的kill只會殺死分叉的進程,但不會是子進程(即sleep命令)。在子進程中使用紅寶石殺死分叉進程
pid = fork do
Thread.new do
`sleep 20`
end
end
sleep(1)
Process.kill("HUP",pid)
難道還有比通過進程樹尋找其他的方式來殺死所有的子進程(線程中的分叉過程反引號命令生成的)?
以下代碼會分叉主進程並在反引號中運行命令。腳本結尾處的kill只會殺死分叉的進程,但不會是子進程(即sleep命令)。在子進程中使用紅寶石殺死分叉進程
pid = fork do
Thread.new do
`sleep 20`
end
end
sleep(1)
Process.kill("HUP",pid)
難道還有比通過進程樹尋找其他的方式來殺死所有的子進程(線程中的分叉過程反引號命令生成的)?
幕後發生系統和反引號操作使用叉子叉 當前進程,然後他們執行使用 EXEC給定的操作。
由於exec替換當前進程,所以如果 操作成功,它不會返回任何內容。如果操作失敗,則引發 SystemCallError。
http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html
您可以使用
pid = Process.spawn('sleep 20')
立即獲得進程的PID。你上面的代碼將變爲:
pid = Process.spawn('sleep 20')
sleep(1)
Process.kill('HUP',pid)
所以我想答案是否定的,你必須搜索進程樹 – jhj