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

如何从Java向外部进程发送SIGINT信号?,java,process,signals,Java,Process,Signals,我有一个Java应用程序,它创建一个外部进程,并通过InputStream读取进程的stdout。我需要能够在完成过程后终止它。有没有办法向该进程发送SIGINT信号?(好像我从控制台按下了Ctrl+C) 外部进程不是我的代码,我无法修改它。您能否将kill-SIGINT发送到该进程(假设您知道进程ID): 当然,这将是一个依赖于平台的解决方案。。。尽管处于“沙箱模式”,但您仍有可能使用此工具。但它可能会给你一个想法: 另请参见此处的相关问题: 不幸的是,在Java中没有一种本地方式来发送ar

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


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

您能否将
kill-SIGINT
发送到该进程(假设您知道进程ID):

当然,这将是一个依赖于平台的解决方案。。。尽管处于“沙箱模式”,但您仍有可能使用此工具。但它可能会给你一个想法:

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


不幸的是,在Java中没有一种本地方式来发送arbirtray信号


我同意Lukas使用Runtime.exec()或者您可以使用类似library的东西。

您是否以
java.lang.Process
的形式运行外部程序?因为Process类有一个
destroy()
方法

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

没有与平台无关的解决方案。@fix\u moeller:我想你是对的。但也许有一个库提供了某种抽象,至少是为了杀死其他进程…@Lukas Eder,我有一个问题,如果我在一个新线程中打开这个进程,然后假设它被挂起等等,我在linux中使用SIGINT杀死它(从另一个线程),它基本上杀死了我的整个java程序,当我的程序仍在运行时,是否有可能只有这个特定进程被终止???@SpaceRocker:为您的问题获取答案的最佳方法是在堆栈上提出一个新问题Overflow@LukasEder,如果我问这个问题,会被指责为不合适,不幸的是StackOverflow对我有偏见:(这似乎发送了一个SIGTERM信号,而不是SIGINT。请看这里的问题:这似乎没有发送实际信号,请只调用信号处理程序。或者?@Jason Axelson我也在使用sun.misc.signal.raise(新信号(“术语”));我正在初始化一个JNI组件,该组件保持运行且从不停止,甚至我的其他线程也会停止。因此,我正在使用此解决方案关闭我的应用程序。信号是特定于平台的。例如,在Windows上,只能接收信号的一个子集。
Runtime.getRuntime().exec("kill -SIGINT 12345");