2017-07-11 63 views
0

我有一個腳本(script.sh),產生了大量的子進程。如果我運行從經由./script.sh殼中的腳本,我可以通過殺死的全過程樹從Ruby中殺死進程組殺死我的整個計算機

kill -- -<PID> 

其中PID是script.sh進程的進程ID(這顯然是等於組ID) 。

但是,如果我通過

pid = Process.spawn(script.sh) 

產卵在Ruby腳本我不能設法殺死進程樹。

Process.kill(9,pid) 

只殺死父進程。甚至最糟糕的是,以下內容

Process.kill(9,-Process.getpgid(pid)) ### Don't try this line at home 

終止我的電腦。 試圖通過殺死進程

system("kill -- -#{pid}") 

也失敗。 我該如何從Ruby中殺死這個進程樹?

+0

沒有你交叉檢查你的Ruby腳本的PID值 – mbieren

+0

是的,從菌種的PID與PID我在ps的斧頭 – tvcuyck

+0

看到我會嘗試fork一個子進程在其運行腳本並殺死它對應的PID像[kill示例](http://ruby-doc.org/core-2.4.1/Process.html#method-c-kill)。 – guitarman

回答

0

我想我找到了解決方案。產卵的過程

pid = Process.spawn(script.sh, :pgroup => true) 

讓我能夠通過

Process.kill(9,-Process.getpgid(pid)) 

它看起來像默認的bash組進程殺死進程組,而產卵默認不啓用此。