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

Jjr*_*ina 17 java signals process

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

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

Luk*_*der 16

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

Runtime.getRuntime().exec("kill -SIGINT 12345");
Run Code Online (Sandbox Code Playgroud)

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

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

另请参阅此相关问题:

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

  • 由于[Windows没有信号](http://stackoverflow.com/questions/140111/sending-an-arbitrary-signal-in-windows),没有独立于平台的解决方案. (3认同)

Jas*_*son 6

对于从 Google 到达这里的其他人,如果您想将信号发送到当前进程(又名 JVM),您可以使用sun.misc.Signal.raise()方法。就我个人而言,我需要它是因为我正在使用 JNI 库。


Ulf*_*rig 2

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

  • 这似乎发送了一个 SIGTERM 信号,而不是 SIGINT。在这里看到这个问题:http://stackoverflow.com/questions/2950338/how-can-i-kill-a-linux-process-in-java-with-sigkill-process-destroy-does-sigte (18认同)