Ubuntu Java:查找特定程序';s pid并终止程序
我正在尝试创建一个应用程序,该应用程序检查此特定应用程序是否正在运行,然后在指定的时间后关闭该应用程序。我计划获取应用程序的pid。如何获取应用程序的pidUbuntu 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都是您要终止的应用程序的名称。如果您从脚本启动此应用程序,则可以使用特殊变量$
谢谢您可能需要使用调用
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();
}
}
}