2011-08-18 54 views
1

我在java中使用'Runtime.getRuntime()。exec()'創建子進程,並希望檢測子進程何時退出。所以我想知道是否有任何信號像'SIGCHILD'在posix?java中的SIGCHILD信號

回答

2

不,不是精確的。您可以撥打Process.waitFor()等待過程退出。但是,如果您是通過專用線程來實現這一目標,那麼這與信號處理程序非常相似。或者,更昂貴的方法是輪詢Process.exitValue(),這將拋出異常,直到孩子實際退出。

+0

因爲我想異步調用'exec()',所以'等待'可能不適合我。我剛發現一個包裹'sun.misc.Signal'和'sun.misc.SignalHandler'可能會幫助我解決這個問題。一個信號處理程序可以創建爲'this:Signal.handle(new Signal(「INT」),new SignalHandler()',但似乎Java不支持'sigchild'。 – yelo

+1

要「調用'異步執行'只需創建一個新的'Thread'並從'Thread'調用exec()''Thread'然後可以自由地等待進程退出之前結束。這是Java的方式來做事情,無論如何, 'sun。*'層次結構中的類依賴於實現,並且可能會發生變化 - 應用程序代碼中永遠不會使用它們,它們支持JVM和API的內部實現,它們是沒有設計靈活性,錯誤處理或用戶訪問所需的穩定性。 –

+0

明白了,非常感謝! – yelo