如何使用 SIGKILL Process.destroy() 杀死 Java 中的 Linux 进程
在Linux中,当我在 java.lang.Process 对象(这是 true 类型的 java.lang.UNIXProcess )上运行 destroy 函数时,它会发送一个 SIGTERM 信号来处理,有没有办法用 SIGKILL 杀死它?
In Linux when I run the destroy function on java.lang.Process object (Which is true typed java.lang.UNIXProcess ) it sends a SIGTERM signal to process, is there a way to kill it with SIGKILL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不使用纯Java。
最简单的替代方法是使用 Runtime.exec() 来运行
kill -9
命令作为外部进程。不幸的是,获取 PID 并不是那么简单。您要么需要使用反射黑魔法来访问 private int pid 字段,要么弄乱 ps 命令的输出。
更新 - 实际上,还有另一种方法。创建一个将运行真正的外部应用程序的小实用程序(C 程序、shell 脚本等)。对实用程序进行编码,以便它记住子进程的 PID,并为 SIGTERM 设置一个信号处理程序,该处理程序将 SIGKILL 子进程。
Not using pure Java.
Your simplest alternative is to use
Runtime.exec()
to run akill -9 <pid>
command as an external process.Unfortunately, it is not that simple to get hold of the PID. You will either need to use reflection black-magic to access the
private int pid
field, or mess around with the output from theps
command.UPDATE - actually, there is another way. Create a little utility (C program, shell script, whatever) that will run the real external application. Code the utility so that it remembers the PID of the child process, and sets up a signal handler for SIGTERM that will SIGKILL the child process.
斯蒂芬他的回答是正确的。我写了他说的:
你也可以这样获取pid:
Stephen his answer is correct. I wrote what he said:
You can also get the pid this way:
如果您知道进程名称,则可以使用
pkill
If you know process name you can use
pkill
从Java 1.8开始,
你可以调用方法
destroyForcously()
,它默认调用destroy()
方法,但根据Java文档,返回的所有子进程code>ProcessBuilder
或Runtime.exec()
实现此方法。Since Java 1.8
you can call the method
destroyForcibly()
, which calls thedestroy()
method by default, but according to the Java docs, all sub-processes returned byProcessBuilder
orRuntime.exec()
implement this method.