2014-03-24 41 views
2

在我的java程序中,我想殺死名爲「DummyBroker」(這是另一個java程序)的進程。我可以使用TaskKill殺死它,但它需要進程的PID。那麼我如何獲取特定java進程的pid然後殺死它?使用其名稱而不是PID殺死java進程

+0

'tasklist'將打印格式化的所有進程。您可以使用此輸出來搜索正確的進程並獲取其PID。請注意,這隻適用於Windows,但我想你知道。 – Veluria

+0

相關:http://stackoverflow.com/questions/35842/how-can-a-java-program-get-its-own-process-id –

+0

作爲一個短期的解決方法,我創建了一個靜態的'Process'。使用'runtime.exec'啓動java應用程序並使用'p.destroy'終止進程。 – zer0Id0l

回答

3

終於找到一個簡單的解決方案here

JPS - Java虛擬機進程狀態工具,可用於用它的名字殺死一個java進程。

for /f "tokens=1" %i in ('C:\java\jdk-7u45-windows-x64\bin\jps -m ^| find "DummyBroker"') do (taskkill /F /PID %i) 

我們可以在批處理文件中添加上面的內容,只需從java程序調用批處理文件即可。

1

Runtime.getRuntime()。exec(「taskkill/F/IM」+ TASKNAME); 雖然這只是TASKNAME

3

殺死你應該看看這個鏈接:Killing a process using Java

而且使用這樣的:

Runtime.getRuntime().exec("taskkill /F /IM <processname>.<extension>")

否則,你也許可以使用tasklistsplit一個combinaison找到包含的行,然後找到PID

+1

這隻能通過taskname來終止。所有的java程序都有java.exe作爲taskname –

+0

java進程會被命名爲「java.exe」,上面的命令會殺死所有java進程而不是特定的java應用程序(在我的例子中是'com.xxx.java.broker。 DummyBroker') – zer0Id0l

+1

我現在不能嘗試它,因爲我在Mac上,但如果沒有人給你答案,我會在今晚嘗試給你一個更具體的方法來做到這一點;) –

0

通過這個鏈接... http://www.golesny.de/p/code/javagetpid

使用java.lang.management.ManagementFactory這樣

RuntimeMXBean rtb = ManagementFactory.getRuntimeMXBean(); 
String processName = rtb.getName(); 
int result = 0; 

Pattern pattern = Pattern.compile("^([0-9]+)@.+$", Pattern.CASE_INSENSITIVE); 
Matcher matcher = pattern.matcher(processName); 
if (matcher.matches()) { 
result = new Integer(Integer.parseInt(matcher.group(1))); 
}