Ubuntu Java:查找特定程序';s pid并终止程序

Ubuntu Java:查找特定程序';s pid并终止程序,java,linux,ubuntu,kill,pid,Java,Linux,Ubuntu,Kill,Pid,我正在尝试创建一个应用程序,该应用程序检查此特定应用程序是否正在运行,然后在指定的时间后关闭该应用程序。我计划获取应用程序的pid。如何获取应用程序的pid 谢谢您可能需要使用调用ps和killUnix命令并清除它们的输出。我认为Java程序无法轻松检查/访问它没有创建的进程。您可以尝试ps-aux | grep foobar获取pid,然后对其发出kill命令,或者您可以使用foobar,在这两种情况下,foobar都是您要终止的应用程序的名称。如果您从脚本启动此应用程序,则可以使用特殊变量$

我正在尝试创建一个应用程序,该应用程序检查此特定应用程序是否正在运行,然后在指定的时间后关闭该应用程序。我计划获取应用程序的pid。如何获取应用程序的pid


谢谢

您可能需要使用调用
ps
kill
Unix命令并清除它们的输出。我认为Java程序无法轻松检查/访问它没有创建的进程。

您可以尝试
ps-aux | grep foobar
获取pid,然后对其发出
kill
命令,或者您可以使用
foobar
,在这两种情况下,
foobar
都是您要终止的应用程序的名称。

如果您从脚本启动此应用程序,则可以使用特殊变量
$获取在后台创建的上一个进程的pid,此值可保存在文件中,供以后在关机功能中使用

以下是一个例子:

nohup java -jar example.jar &
echo $! > application.pid

用于java进程的pid—例如
ps-aux | grep java | awk'{print$2}'


您还可以调用
jps
,它将为您提供一个流程列表。这样做的一个缺点是,它只显示用户发出jps命令的进程。

您可以使用
pidof
获取应用程序的pid


pidof
ps aux|awk'/java/{print“睡眠10;杀死“$2}”| bash

在Ubuntu中,
ps-aux
抛出一个语法错误,其中
ps-aux
起作用

输出通过管道传输到
awk
,它将行与java匹配并休眠10秒,然后用pId终止程序。注意要重击的管道。请随意指定您想要多长时间,或者调用任何其他您认为合适的调用。我注意到大多数其他答案都忽略了问题的“一段时间后”部分

您也可以通过调用
pidofjava | awk'{print“sleep 10;kill“$1}”| bash
来实现这一点,但选择权在您。我通常使用ps aux

您可以参考此链接…它告诉您如何查找特定类名的pid

那么这个如何

public static void killAll(String process) {
    try {
        Vector<String> commands = new Vector<String>();
        commands.add("pidof");
        commands.add(process);
        ProcessBuilder pb = new ProcessBuilder(commands);
        Process pr = pb.start();
        pr.waitFor();
        if (pr.exitValue() != 0) return;
        BufferedReader outReader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        for (String pid : outReader.readLine().trim().split(" ")) {
            log.info("Killing pid: "+pid);
            Runtime.getRuntime().exec("kill " + pid).waitFor();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
publicstaticvoidkillall(字符串进程){
试一试{
矢量命令=新矢量();
命令。添加(“pidof”);
命令。添加(进程);
ProcessBuilder pb=新的ProcessBuilder(命令);
进程pr=pb.start();
pr.waitFor();
如果(pr.exitValue()!=0)返回;
BufferedReader outReader=新的BufferedReader(新的InputStreamReader(pr.getInputStream());
for(字符串pid:outReader.readLine().trim().split(“”){
log.info(“终止pid:+pid”);
Runtime.getRuntime().exec(“kill”+pid.waitFor();
}
}捕获(例外e){
e、 printStackTrace();
}
}
}