2011-11-24 20 views
3

我有我的Java應用程序,它調用瀏覽器[IE或Firefox等] ..如何從Java殺死火狐子過程/標籤/ C++

的要求是,當我的Java應用程序退出,我必須殺死所有的網頁[子進程]我從我的應用程序打開IE/Firefox等..

我使用下面的代碼。

注:CMD包含 「系統瀏覽器中的exe路徑和URL」

static ArrayList<Process> pro = new ArrayList<Process>(); 
String cmd=" "; 
Process p = Runtime.getRuntime().exec(cmd); 
pro.add(p); 

我保持一個靜態數組列表添加所有的過程對象。

殺死進程調用我我使用以下代碼

Iterator<Process> iter = pro.iterator(); 
while(iter.hasNext()){ 
Process p = iter.next(); 
System.out.println("Now Killing "+p.toString()); 
p.destroy(); 
} 

此代碼[p.destroy();]工作正常的Internet Explorer,但它不工作的Firefox/Chrome瀏覽器...

由於Firefox的運行作爲一個主要的過程和你我調用程序進入其子:(...

我不得不使用Windows和Linux通用的修復..

我甚至可以去C++文件修復其做到這一點與一些搜索條件..所以,我可以使用

運行我的代碼執行該可執行文件。 getRuntime()。exec(「executable cmd」);

+0

可能的重複:http://stackoverflow.com/questions/7550392/kill-a-process-tree-on-windows-using-java –

回答

0

好問題。

有幾種解決方案。

第一個是以下內容。不是直接運行瀏覽器,而是使用腳本(shell爲unix,bat文件爲windows),它會向您報告它運行的瀏覽器的進程ID。然後在windows上使用kill -9 PID,在窗口上使用taskkill。 該解決方案將要求您爲不同的平臺編寫腳本(列表中爲2)。

但我有其他建議。如果您在瀏覽器中打開的URL是您的(我的意思是您可以在其中添加一些JavaScript),則可以執行以下操作。您打開的URL將創建AJAX調用服務器。當你關閉你的應用程序時,你應該向服務器發送命令給瀏覽器來關閉它。此時,正在瀏覽器中的JavaScript將關閉其窗口。這是最爲跨平臺的解決方案。

順便說一句我認爲所提到的AJAX組件使用的服務器可能是您自己的應用程序。而你發送給AJAX組件的信號只是連接錯誤。真的,如果你的應用程序是服務器,並且你正在關閉它,AJAX調用將會失敗。這100%意味着瀏覽器也應該關閉。

+0

但我不想通過維護腳本使其複雜化...可以Java本身沒有任何解決方案嗎? ..它很難甚至得到PID ...但我可以得到父PID我的意思是我的Java應用PID使用RuntimeMXBean rmxb = ManagementFactory.getRuntimeMXBean(); System.out.println(rmxb.getName()); –

0

嘗試使用pkill(按進程名稱查殺)命令。

Runtime.getRuntime().exec("pkill firefox"); 

或C++

system("pkill firefox"); 

但它不是獨立於平臺。它將在類Unix操作系統上運行,而不是在Windows中運行。

+0

如何殺死特定的標籤,但不是整個過程? –

+0

我google搜索,但不幸的是我找不到任何解決方案,您的需求。 – Ocean

1

在Windows中,你可以運行:

wmic process get description, executablepath, processid | findstr firefox

,這將給你火狐進程的PID。那麼你可以用tskill PID來殺死 這個過程。

+0

你將如何找到每個標籤的PID? –