2011-11-24 19 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? –