我想從Java開始的進程超時。暫停後,我想殺死這個過程。到現在爲止還挺好。問題是,我想在正常執行和超時之後捕獲stderr/stdout。如果我用destroy()殺死進程會發生什麼?我可以檢索到目前爲止產生的(部分)stderr/stdout嗎?或者他們走了?在Java中的Process.destroy()之後,stderr/stdout流會發生什麼變化?
回答
除了調用Process.exec()/waitFor()/destroy()
的線程之外,您應該有一個或兩個單獨的線程,分別爲stdout
和stderr
(如果合併它們,則爲一個)。閱讀線程將獲得生成到EOF的任何數據。如果您致電Process.destroy()
,EOF可能會更早發生,就這些。
是的,但是如果我只是殺了進程然後*嘗試收集stderr/stdout會怎麼樣?這是我的問題。 – 2010-03-31 15:27:07
你會以錯誤的順序做事,那就是這個樣子。別。 – EJP 2010-04-01 07:56:56
在多線程,多核心環境中,什麼是「訂單」?因此我的問題。 – 2010-04-01 15:12:52
進程處理本質上是特定於操作系統的,我特別關注Java如何在這裏處理Unix進程。
不幸的是,Process
closes its streams when you call .destroy()
。我不知道爲什麼JDK設計者認爲這是正確的設計模式,但它確實使處理終止的流程變得更加複雜。
值得一提的是,InputStream
小號Process
認爲是其中居然有一個drainInputStream()
方法所做的正是我們會想什麼ProcessPipeInputStream
情況 - 它在一個字節的緩衝區後盾文件描述符所有其餘的字節,並將它們存儲讀取爲了我們。此方法「在進程退出時由進程收集器線程調用」,但不幸的是在進程爲'.destroy()
編輯時不會調用該方法。
你可以期望的話,最好是陪審團鑽機自己drainInputStream()
的行爲,並呼籲,對於這兩種stdout
和stderr
你打電話之前.destroy()
。有些數據仍然可能會在您耗盡它們之後但在.destroy()
完成之前寫入到這兩個數據流中,但這會得到大部分。
- 1. 如果settimeout之後的變量發生變化,但在真正運行之前會發生什麼變化
- 2. WeakReference.Gar的GC之後的WeakReference會發生什麼變化。目標
- 3. 加入超時值後,Java線程會發生什麼變化
- 4. php爲什麼一個變量會在post後發生變化?
- 5. 流程結束後會發生什麼?
- 6. 會話過期後會話ID會發生什麼變化?
- 7. 循環後變量的內存會發生什麼變化? (C++)
- 8. 爲什麼在Java中的poll方法之後,PriorityQueue中的值會發生變化?
- 9. pthread_create之後pthread_t會發生什麼?
- 10. 調用服務器之後,javascript變量會發生什麼變化?
- 11. JTextPane在Java 6和Java 7之間的getMinimumWidth中發生了什麼變化
- 12. C字符串中'\ 0'後內存會發生什麼變化?
- 13. 中斷HTTP流時會發生什麼?
- 14. 爲什麼Ghostscript中的PDF優化後搜索結果會發生變化?
- 15. 成功部署後CF清單會發生什麼變化?
- 16. 函數調用後指針會發生什麼變化
- 17. 創建副本後數組會發生什麼變化?
- 18. 災難恢復後Oracle序列會發生什麼變化?
- 19. MYSQL:表更改後結果集會發生什麼變化?
- 20. 返回後,返回值會發生什麼變化?
- 21. 爲什麼會發生? java
- 22. onDestroy()後會發生什麼
- 23. Form.Close後會發生什麼?
- 24. EntityManager.persist()後會發生什麼
- 25. netdev_open後會發生什麼?
- 26. * ngFor後會發生什麼?
- 27. 在UIView中調用-drawRect之後會發生什麼?
- 28. 在Swift中替換它們之後會發生什麼?
- 29. 爲什麼在cin中斷時會發生變化? C++
- 30. 在.NET中投射對象時會發生什麼變化?
你如何閱讀stdout和stderr?他們怎麼會有「部分」輸出? – 2010-03-30 20:49:31
當進程超時並殺死它時,會有部分結果。然而,我仍然想要捕捉它們以供以後調查。 – 2010-03-30 21:22:12