2011-10-14 55 views

回答

6

你可以嘗試ps -aux | grep foobar用於獲取PID,然後發出針對它的kill命令,或者你可能想使用pkillfoobar,在這兩種情況下foobar是要終止應用程序的名稱。

0

你可能不得不調用pskill Unix命令使用Runtime.exec和刮它們的輸出。我不認爲Java程序可以輕鬆地檢查/訪問它沒有創建的進程。

1

如果您從腳本啓動此應用程序,您可以使用特殊變量$!獲取在後臺創建的最後一個進程的pid,該值可以保存在文件中以供將來在關閉功能中使用。

下面是一個例子:

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

PID對Java進程-e.g ps -aux | grep java | awk '{print $2}'

您也可以致電jps這將給你一個進程列表。這樣做的一個缺點是它只會顯示發佈jps命令的用戶的進程。

3

可以使用pidof讓你的應用程序

pidof <application name>

1

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。

3

這個怎麼樣,然後一個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(); 
    } 
} 
}