我試圖做一個應用程序,檢查如果這個特定的應用程序正在運行,然後在指定的時間後殺死應用程序。我打算獲得應用程序的pid。我如何獲得應用程序的pid?Ubuntu的Java:找到一個特定的程序的PID並殺死程序
感謝
我試圖做一個應用程序,檢查如果這個特定的應用程序正在運行,然後在指定的時間後殺死應用程序。我打算獲得應用程序的pid。我如何獲得應用程序的pid?Ubuntu的Java:找到一個特定的程序的PID並殺死程序
感謝
你可以嘗試ps -aux | grep foobar
用於獲取PID,然後發出針對它的kill
命令,或者你可能想使用pkill
foobar
,在這兩種情況下foobar
是要終止應用程序的名稱。
你可能不得不調用ps
和kill
Unix命令使用Runtime.exec和刮它們的輸出。我不認爲Java程序可以輕鬆地檢查/訪問它沒有創建的進程。
如果您從腳本啓動此應用程序,您可以使用特殊變量$!
獲取在後臺創建的最後一個進程的pid,該值可以保存在文件中以供將來在關閉功能中使用。
下面是一個例子:
nohup java -jar example.jar &
echo $! > application.pid
PID對Java進程-e.g ps -aux | grep java | awk '{print $2}'
。
您也可以致電jps
這將給你一個進程列表。這樣做的一個缺點是它只會顯示發佈jps命令的用戶的進程。
可以使用pidof
讓你的應用程序
pidof <application name>
ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash
在Ubuntu,ps -aux
拋出一個語法錯誤,其中ps aux
作品的PID。
將輸出傳送到awk
,它與java行匹配並睡眠10秒,然後用pId殺死程序。注意管道打擊。隨意指定無論您想要的長時間,或撥打您認爲合適的其他電話。我注意到大部分其他答案都忽略了趕上「經過一段時間」後的部分問題。
你也可以通過調用pidof java | awk '{print "sleep 10; kill "$1}' | bash
來完成此操作,但選擇是你的。我通常使用ps aux。
Find the pid of a java process under Linux
你可以參考這個鏈接...它告訴你要找到具體的類名
這個怎麼樣,然後一個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();
}
}
}