无法使用selenium线程关闭进程

时间:2013-07-19 15:10:21

标签: python selenium selenium-webdriver subprocess

我已经解决了这个问题一段时间了,我无法解决它。我正在制作子流程,然后这些子流程打开更多流程(实际上是selenium webdrivers)。 webdriver容易崩溃,因此我构建了这个分层系统,以便主进程可以生成子进程,并在需要时杀死/重制它们。

我面临的问题是,如果我运行主线程并按Ctrl + C,所有孩子和那些孩子(浏览器)的孩子都会死亡。但是,当我尝试以编程方式执行此操作时,无论是((Popen)proc).kill(),我都尝试过SIGINT,SIGTERM。我试过,.terminate,os.kill,os,killpg。无论我做什么,硒过程都不会死,但是当我按下Ctrl + C时,它们都会死亡。

代码: 这是我如何制作线程的。这怎么会导致问题?

proc = subprocess.Popen( ["python" , module_path() + "/scraper.py"], stdout=subprocess.PIPE ,stdin=subprocess.PIPE)

所以我的主要问题是,有没有办法调用终端中发生的Ctrl + C效果。我最初尝试使用线程,但他们只是保持死锁(为什么我不知道,他们没有共享内存,没有依赖)。 Python不是我的主要语言,任何帮助都是沉淀的。

谢谢。 基兰

1 个答案:

答案 0 :(得分:1)

最后我解决了它。我更改了程序,以便有一个管理器进程和一个子进程。经理催生了几个孩子,孩子们催生了硒浏览器。经理等待孩子崩溃,当孩子这样做时,经理会杀死杀死硒过程的孩子。

proc =  subprocess.Popen( ["python" , path + "/pythonChild.py"], preexec_fn=os.setsid, stdout=subprocess.PIPE ,stdin=subprocess.PIPE)
os.killpg( proc.pid, 9 )

上面的代码只是制作并杀死它但是通过添加preexec它会启动一个新的进程组,然后可以终止它杀死所有的子进程。

希望这有助于某人!