如何从Java/ c++杀死firefox子进程/tab

How to kill firefox child process/tab from Java/C++

本文关键字:firefox 子进程 tab 杀死 c++ Java      更新时间:2023-10-16

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

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

我使用以下代码:

注意:cmd包含"System Browser exe path and 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();]在ie浏览器下可以正常工作,但在Firefox/Chrome浏览器下不能正常工作…

由于Firefox作为一个主进程运行,而我调用的进程作为它的子进程:(…

我必须使用通用修复Windows和Linux.

我甚至可以去c++文件修复,这与一些搜索条件。这样我就可以在代码中使用

执行可执行文件

Runtime.getRuntime()。执行(执行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。这个解决方案需要你为不同的平台编写脚本(at list for 2)。

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

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

尝试使用pkill(通过进程名终止)命令。

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

或c++

system("pkill firefox");

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