如何从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中运行。