【发布时间】:2011-12-07 09:58:39
【问题描述】:
我正在尝试创建一个应用程序来检查此特定应用程序是否正在运行,然后在指定时间后终止该应用程序。我打算获取应用程序的pid。如何获取应用的 pid?
谢谢
【问题讨论】:
标签: java linux ubuntu kill pid
我正在尝试创建一个应用程序来检查此特定应用程序是否正在运行,然后在指定时间后终止该应用程序。我打算获取应用程序的pid。如何获取应用的 pid?
谢谢
【问题讨论】:
标签: java linux ubuntu kill 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();
}
}
}
【讨论】:
Find the pid of a java process under Linux
你可以参考这个链接...它告诉你如何找到一个特定类名的 pid
【讨论】:
ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash
在 Ubuntu 中,ps -aux 会引发语法错误,而 ps aux 可以工作。
输出通过管道传送到awk,它与java 匹配的行并休眠10 秒,然后用pId 终止程序。注意要 bash 的管道。随意指定您想要多长时间,或拨打您认为合适的其他电话。我注意到大多数其他答案都忽略了问题的“经过一定时间”部分。
您也可以通过调用pidof java | awk '{print "sleep 10; kill "$1}' | bash 来完成此操作,但选择权在您。我一般用ps aux。
【讨论】:
您可以使用pidof 来获取您的应用程序的pid
pidof <application name>
【讨论】:
用于 java 进程的 pid -e.g ps -aux | grep java | awk '{print $2}' .
您也可以致电jps,它会为您提供进程列表。这样做的一个缺点是它只会向您显示发出 jps 命令的用户的进程。
【讨论】:
您可以尝试 ps -aux | grep foobar 获取 pid,然后针对它发出 kill 命令,或者您可能想要使用 pkillfoobar,在这两种情况下,foobar 都是您应用的名称想终止。
【讨论】:
如果您从脚本启动此应用程序,您可以使用特殊变量 $! 获取在后台创建的最后一个进程的 pid,您可以将此值保存在文件中以供以后在关闭函数中使用.
下面是一个例子:
nohup java -jar example.jar &
echo $! > application.pid
【讨论】:
您可能必须使用Runtime.exec 调用ps 和kill Unix 命令并抓取它们的输出。我不认为 Java 程序可以轻松地检查/访问它没有创建的进程。
【讨论】: