代码之家  ›  专栏  ›  技术社区  ›  Mohammad

如何使用Java中断Linux进程

  •  0
  • Mohammad  · 技术社区  · 11 年前

    我有一个进程生成器,可以让一些进程在linux中工作(这段代码是用java编写的),但在这些进程工作的过程中,我想进行一些中断来更改进程配置。

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

    2 回复  |  直到 11 年前
        1
  •  3
  •   eis    11 年前

    由于@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");
    
        2
  •  1
  •   Kiran Jujare    11 年前

    要终止进程,请使用以下命令获取该进程的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