2
我需要能夠從java內部啓動和停止外部程序。我開始工作的很好,但是當我停止時,它會殺死它的父母。事實證明,我開始的過程是用kill 0殺死它的整個進程組。有人知道如何使它成爲我的java進程不在子進程的進程組中嗎?更改Runtime.getRuntime()中的進程組。exec進程
我需要能夠從java內部啓動和停止外部程序。我開始工作的很好,但是當我停止時,它會殺死它的父母。事實證明,我開始的過程是用kill 0殺死它的整個進程組。有人知道如何使它成爲我的java進程不在子進程的進程組中嗎?更改Runtime.getRuntime()中的進程組。exec進程
所以我想有兩個答案:
1)創建子進程作爲一個新的進程組的組長。
ps -efj
:在Linux中,我可以通過使用
bash -c "command <args>"
然後你就可以檢查新進程的進程組是從你運行該命令與指令的終端不同的做到這一點的命令行
「j」選項顯示進程組標識(PGID)。
我警告你,你可能有逃避古怪的東西有,因爲引號都需要傳遞給了「慶典」命令和「-c」選項與參數的命令它與Java運行正常。所以在Java中我想這會是這個樣子:
Process processWithNewProcessGroup = Runtime.getRuntime().
exec("bash -c \"sleep 60\"");
2)改變你的孩子的過程,因此不會殺死其進程組的一切。
使它成爲一個守護進程。 – 2011-03-01 22:47:01
@Murali副總裁:如果這是一個答案發布它作爲答案。 – EJP 2011-03-01 23:11:27