2011-08-18 20 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