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

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

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

您是否将外部程序作为java.lang.Process运行? 由于Process类有一个destroy()方法。

你能将kill -SIGINT 发送给进程(假设你知道进程ID):

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

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

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

另见这里的相关问题:

如何使用SIGKILL杀死java中的Linux进程Process.destroy()执行SIGTERM

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

遗憾的是,没有一种本地方式可以在Java中发送arbirtray信号。

我同意Lukas使用Runtime.exec()或者你可以使用类似Posix for Java库的东西。