如何从Java向外部进程发送SIGINT信号?

时间:2011-10-20 11:25:29

标签: java process signals

我有一个Java应用程序,它创建一个外部进程并通过InputStream读取进程'stdout。当我完成它时,我需要能够杀死进程。有没有办法向这个过程发送SIGINT信号? (好像我从控制台按了Ctrl + C)。

外部进程不是我的代码,我无法修改它。

4 个答案:

答案 0 :(得分:15)

您可以将kill -SIGINT <pid>发送给流程(假设您知道流程ID):

Runtime.getRuntime().exec("kill -SIGINT 12345");

当然,这将构成一个依赖于平台的解决方案......潜在地,您将能够使用此工具,尽管它处于“沙箱模式”。但它可能会给你一个想法:

http://commons.apache.org/sandbox/runtime/

请参阅此处的相关问题:

how can I kill a Linux process in java with SIGKILL Process.destroy() does SIGTERM

答案 1 :(得分:3)

对于从Google到达此处的其他人,如果您想将信号发送到当前进程(也称为JVM),您可以使用sun.misc.Signal.raise()方法。我个人需要它,因为我使用的是JNI库。

答案 2 :(得分:2)

不幸的是,没有一种本地方式可以用Java发送arbirtray信号。

我同意Lukas使用Runtime.exec()或者您可以使用类似Posix for Java库的内容。

答案 3 :(得分:2)

您是否以java.lang.Process身份运行外部程序?由于Process类具有destroy()方法。