我有一个Java应用程序,它创建一个外部进程并通过InputStream读取进程'stdout。当我完成它时,我需要能够杀死进程。有没有办法向这个过程发送SIGINT信号? (好像我从控制台按了Ctrl + C)。
外部进程不是我的代码,我无法修改它。
答案 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()
方法。