如何从Java/ c++杀死firefox子进程/tab
How to kill firefox child process/tab from Java/C++
我有我的应用程序在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上。
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- 使用信号检测子进程何时终止的最佳方法是什么?
- 等待等待失效的子进程
- 如何从Java/ c++杀死firefox子进程/tab