我想从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. 会话过期后会话ID会发生什么变化?
- 6. 为什么在Java中的poll方法之后,PriorityQueue中的值会发生变化?
- 7. pthread_create之后pthread_t会发生什么?
- 8. 调用服务器之后,javascript变量会发生什么变化?
- 9. C字符串中'\ 0'后内存会发生什么变化?
- 10. 为什么Ghostscript中的PDF优化后搜索结果会发生变化?
- 11. MYSQL:表更改后结果集会发生什么变化?
- 12. 函数调用后指针会发生什么变化
- 13. 灾难恢复后Oracle序列会发生什么变化?
- 14. 中断HTTP流时会发生什么?
- 15. 为什么会发生? java
- 16. Form.Close后会发生什么?
- 17. EntityManager.persist()后会发生什么
- 18. netdev_open后会发生什么?
- 19. * ngFor后会发生什么?
- 20. Java随机数在一天之后种子发生变化
- 21. 在Ruby中声明变量时后台会发生什么?
- 22. 在回复呼叫中head变为0后会发生什么?
- 23. 在em.close()之后,延迟加载的实体会发生什么?
- 24. 在检查点之后写入的事件会发生什么?
- 25. PHPUnit:tearDown()方法未处理的变量会发生什么变化?
- 26. WinForms:.resx文件中存储的值会发生什么变化?
- 27. OnPause onResume中的计时器会发生什么变化
- 28. 为什么在jQuery $ .each方法中变量的值会发生变化?
- 29. 如果将“...”放在Java变量名称之前会发生什么?
- 30. 为什么这个数组值在我“存储”之后发生变化?
你如何阅读stdout和stderr?他们怎么会有“部分”输出? – 2010-03-30 20:49:31
当进程超时并杀死它时,会有部分结果。然而,我仍然想要捕捉它们以供以后调查。 – 2010-03-30 21:22:12