【发布时间】:2021-06-04 09:21:31
【问题描述】:
大家好,我在尝试杀死子进程时遇到了一些麻烦。Popen 事实上,我想要的是通过 python 打开一个 tor 窗口,做我的事情,然后关闭 tor 窗口,这是我到目前为止所做的:
subprocess.Popen([r'C:\Users\Myname\Desktop\Tor Browser\Browser\firefox.exe'])
#做我的代码
subprocess.Popen([r'C:\Users\Myname\Desktop\Tor Browser\Browser\firefox.exe']).terminate()
但由于 Tor 窗口在程序结束时仍处于打开状态,因此无法正常工作
注意,如果这样做:
subprocess.Popen([r'C:\Users\Myname\Desktop\Tor Browser\Browser\firefox.exe'])
subprocess.Popen([r'C:\Users\Myname\Desktop\Tor Browser\Browser\firefox.exe']).terminate()
在这两行之间不添加任何代码它可以完美运行,我不知道为什么。 任何人都可以帮助我杀死这个子进程?
【问题讨论】:
-
如果这仅在创建和终止之间存在代码时失败,您应该提供一个minimal reproducible example,该minimal reproducible example 具有实际上有故障的尽可能短的代码。并确保它足够正确,不会明显被破坏(我不知道您是在真实程序中创建一个新实例并终止新实例,还是仅作为问题的简写,但这是一个关键区别)。
-
另外,对于一个网络浏览器来说,有更好的方法来杀死它,而不是仅仅发送一个 SIGTERM。看看 Firefox 可用于进程控制、在目标浏览器中运行代码等的命令行参数。
-
好吧对不起,我只是这个网站的新手,
-
但是,即使我在 subprocess.Popen 和 subprocess.terminate() 之间放置一个简单的 time.sleep() 浏览器也不会关闭..
-
这是有道理的。如果您在进程完成连接到内存中浏览器的现有副本之前终止该进程,则会阻止它启动。相反,如果它已经将打开新窗口的指令交给现有副本并兴奋,它已经退出,因此发送 TERM 信号什么也不做。正如我之前所说,这是现代网络浏览器与大多数其他应用程序不同的一种方式。
标签: python subprocess