2016-03-10 73 views
7

我的Java程序通過以下方式創建一個進程:守護進程java進程 - 有沒有這樣的事情?

ProcessBuilder builder = new ProcessBuilder("phantomjs.exe crawl.js"); 
Process proc = builder.start(); 

如果Java程序端突然終止時(可能經常發生),則phantomjs過程(這是不是一個Java進程)能活下來,並會有無法終止它。

我想要phantomjs進程在封閉的java進程終止時(無論是否突然)終止。

有沒有辦法將Process實例定義爲一個「守護進程」對象,當它的超級進程(這是執行上面的代碼的java進程)終止時它會自動終止?

+0

爲什麼不使用[shutdown hooks](https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread))? –

+0

當進程突然關閉時,關閉鉤子不起作用 – KidCrippler

+0

@GentiSaliu我不認爲javascript標記有誤導性。有人可能會想出一種方法來從phantomjs執行的JavaScript代碼中執行我所需的操作。 – KidCrippler

回答

1

API documentation似乎很明確,沒有資格或黃鼠狼措辭:

當有到Process對象的更多引用,而子進程繼續異步執行的子亦不是被殺,而是。

所以父母必須殺死它,父母終止時它不會消失。

+1

是的,我也讀過文檔。我想知道是否有任何框架或第三方庫封裝了Process對象並提供了所需的功能。 – KidCrippler

+0

@KidCrippler:對,我知道這提供了有限的價值。我想如果這是不對的,有人會選擇某種選擇。 –