如何使用Java中断Linux进程

时间:2013-04-10 05:51:05

标签: java linux process interrupt

我有一个进程生成器,它使一些进程在linux中运行(这段代码是由java生成的)但是在这些进程工作期间我想做一些中断来改变进程配置。

如果我使用假脱机方法,它有太多溢出所以我想使用另一种方法来对其他进程进行一些中断。

2 个答案:

答案 0 :(得分:3)

由于@Vlad链接的答案是针对Windows的,而这个问题是针对linux的,所以这里是答案。 Linux uses signals to interrupt processes,您可以使用kill发送信号:

// shut down process with id 123 (can be ignored by the process)
Runtime.getRuntime().exec("kill 123");
// shut down process with id 123 (can not be ignored by the process)
Runtime.getRuntime().exec("kill -9 123");

使用kill,你也可以发送man page中所说的其他信号(并且它不一定是一个杀戮信号)。默认情况下,kill会发送一个SIGTERM信号,告诉进程终止,但可以忽略它。如果您希望终止进程而不能忽略,则可以使用SIGKILL。在上面的代码中,第一个调用使用SIGTERM,后者使用SIGKILL。你也可以明确它:

// shut down process with id 123 (can be ignored by the process)
Runtime.getRuntime().exec("kill -SIGTERM 123");
// shut down process with id 123 (can not be ignored by the process)
Runtime.getRuntime().exec("kill -SIGKILL 123");

如果您希望使用目标程序的名称而不是进程ID进行操作,那么还会killall接受该名称作为参数。顾名思义,这会杀死所有匹配的进程。例如:

// shuts down all firefox processes (can not be ignored)
Runtime.getRuntime().exec("killall -SIGKILL firefox");

答案 1 :(得分:1)

要使用以下命令终止该进程,请获取该进程的pid 的 ps -ef | grep 'process name' 使用pid来杀死pid为16804的进程 例如:

[root@localhost content]# ps -ef | grep tomcat
root     16804     1  0 Apr09 ?        00:00:42 /usr/bin/java -Djava.util.logging.config.file=/usr/local2/tomcat66/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx1024m -/usr/local2/tomcat66/bin/bootstrap.jar -Dcatalina.base=/usr/local2/tomcat66 -Dcatalina.home=/usr/local2/tomcat66 -Djava.io.tmpdir=/usr/local2/tomcat66/temp org.apache.catalina.startup.Bootstrap start

然后在java中使用命令

1. Runtime.getRuntime().exec("kill -15 16804"); // where -15 is SIGTERM 
or
2. Runtime.getRuntime().exec("kill -9 16804"); // where -9 is SIGKILL

选中Killing processes以及killing signals

的各个{{3}}