我一直在嘗試使用Java的ProcessBuilder在Linux中啓動應該運行「長期」的應用程序。這個程序運行的方式是啓動一個命令(在這種情況下,我啓動一個媒體播放應用程序),允許它運行,並檢查以確保它沒有崩潰。例如,檢查PID是否仍然有效,然後重新啓動進程,如果它已經死亡。Java ProcessBuilder:結果進程掛起
我現在得到的問題是,PID在系統中保持活動狀態,但應用程序的GUI掛起。我嘗試將ProcessBuilder(cmd).start()轉換爲一個單獨的線程,但似乎並沒有解決任何問題,正如我所希望的那樣。
基本上結果是,對於用戶來說,程序APPEARS崩潰了,但是殺死驅動ProcessBuilder.start()進程的Java進程實際上允許創建的進程恢復其正常行爲。這意味着Java應用程序中的某些內容正在干擾生成的進程,但我完全不知道這一點。 (因此,爲什麼我試圖將它分離成另一個線程,似乎沒有解決任何問題)
如果任何人有任何輸入/想法,請讓我知道,因爲我不能爲我的生活想到如何解決這個問題。
編輯:我不關心從流程創建的I/O流,因此沒有采取任何措施來解決這個問題 - 這是否會導致流程本身掛起?
既然你已經說過你沒有處理流程的流程,我必須插話說「是的,這很可能是問題的原因。閱讀是很重要的標準輸出和標準錯誤的內容,並且如果孩子希望你寫入標準輸入「」。這將是值得您一陣子檢查這個問題:http://stackoverflow.com/questions/882772/capturing-stdout-when-calling-runtime-exec/882795#882795 – 2010-07-19 22:07:50