如何从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库的东西。