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

2022-09-02 01:33:33

我有一个Java应用程序,它创建一个外部进程,并通过输入流读取该进程的标准输出。当我完成它时,我需要能够杀死它。有没有办法向此过程发送 SIGINT 信号?(就好像我从控制台按了Ctrl+C)。

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


答案 1

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

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

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

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

另请参阅此处的相关问题:

我怎么能用SIGKILL Process杀死Java中的Linux进程.destroy()做SIGTERM


答案 2

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


推荐