我正在尝试创建一个检查此特定应用程序是否正在运行的应用程序,然后在指定的时间后终止应用程序。我打算买这个应用程序的pid。我怎样才能获得应用程序的pid?
由于
答案 0 :(得分:6)
您可以尝试ps -aux | grep foobar
获取pid,然后针对它发出kill
命令,或者您可能希望在pkill
foobar
中使用foobar
{{1}} 1}}是您要终止的应用程序的名称。
答案 1 :(得分:5)
用于java进程的pid -e.g ps -aux | grep java | awk '{print $2}'
。
您也可以致电jps
,它会为您提供流程清单。这样做的一个缺点是,它只会向用户显示发出jps命令的进程。
答案 2 :(得分:3)
您可以使用pidof
获取应用程序的pid
pidof <application name>
答案 3 :(得分:3)
那怎么样?
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();
}
}
}
答案 4 :(得分:1)
如果您是从脚本启动此应用程序,则可以使用特殊变量$!
获取在后台创建的最后一个进程的pid,此值可以保存在文件中以供以后在您的文件中使用关机功能。
以下是一个例子:
nohup java -jar example.jar &
echo $! > application.pid
答案 5 :(得分:1)
ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash
在Ubuntu中,ps -aux
会引发语法错误,其中ps aux
有效。
输出通过管道传送到awk
,它与java匹配行并休眠10秒,然后使用pId终止程序。注意管道打击。您可以随意指定您想要的时间,或者拨打您认为合适的其他电话。我注意到大多数其他答案都被忽略了,以便在问题的一部分时间内抓住“问题”。
您也可以通过拨打pidof java | awk '{print "sleep 10; kill "$1}' | bash
来完成此操作,但您可以选择。我一般用ps aux。
答案 6 :(得分:0)
您可能必须使用Runtime.exec调用ps
和kill
Unix命令并刮掉它们的输出。我认为Java程序不能轻易检查/访问它没有创建的进程。
答案 7 :(得分:0)
Find the pid of a java process under Linux
你可以参考这个链接...它告诉你如何找到特定类名的pid