如何从Java / C ++中杀死firefox子进程/选项卡

我的Java应用程序调用浏览器[IE或Firefox等]。

要求是当我的Java应用程序退出时,我必须杀死我在IE / Firefox等应用程序中打开的所有网页[子进程]。

我使用以下代码。

注意: cmd包含“系统浏览器exe路径和URL”

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

我维护一个静态arraylist来添加所有进程对象。

要杀死我调用的进程,我使用下面的代码

 Iterator 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 ++文件修复,它使用一些搜索条件来执行此操作。所以我可以使用我的代码执行该可执行文件

Runtime.getRuntime()。exec(“executable cmd”);

在Windows中,您可以运行:

wmic process get description, executablepath, processid | findstr firefox

这将为您提供firefox进程的PID。 然后你可以使用tskill PID来杀死进程。

好问题。

有几种解决方案。

第一个是以下内容。 不直接运行浏览器,而是使用脚本(用于unix的shell,用于windows的bat文件),它将报告它运行的浏览器的进程ID。 然后在linux上使用kill -9 PID ,在windows上使用taskkill 。 此解决方案将要求您为不同的平台编写脚本(列表为2)。

但我还有其他建议。 如果您在浏览器中打开的URL是您的(我的意思是您可以在那里添加一些javascript),您可以执行以下操作。 您打开的URL将创建对服务器的AJAX调用。 关闭应用程序时,应该告诉服务器将命令发送到浏览器以关闭它。 此时,运行到浏览器中的javascript将关闭其窗口。 这是最跨平台的解决方案。

BTW我认为提到的AJAX组件使用的服务器可能是您自己的应用程序。 并且您发送到AJAX组件的信号只是连接错误。 实际上,如果您的应用程序是服务器并且您正在关闭它,则AJAX调用将失败。 这100%意味着浏览器也应该关闭。

尝试使用pkill(按进程名称查杀)命令。

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

或者用c ++

 system("pkill firefox"); 

但它不是平台独立的。 它将在类Unix操作系统上运行,而不是在Windows中运行。