用Python Popen创建后台进程

时间:2014-04-06 14:33:17

标签: python-2.7 subprocess

我是蟒蛇的新bie。最近,我遇到了Python Popen的问题,并希望有人可以帮助我。谢谢:D

a.py

#!/usr/bin/env python
import b

b.run()
while True:
     pass

b.py

#!/usr/bin/env python                                                                                                                                                                      
import subprocess

def run():
    subprocess.Popen(['ping www.google.com > /dev/null &'], shell=True)

run()

运行b.py和grep进程状态时

$ ps aux | grep 
test 35806 0.0  0.0  2451284 592 s010  Sl  10:11 0:00.00 ping www.google.com

ping进程在后台运行STATE Sl。

现在我尝试运行a.py

$ ps aux | grep 
test 36088 0.0  0.0  2444116 604 s010  Sl+ 10:15 0:00.00 ping www.google.com

ping进程STATE更改为Sl +,如果我使用ctrl + c停止a.py,则ping进程也会终止。

有没有办法让ping进程在后台运行,当我停止a.py时它不会受到影响?为什么ping进程STATE从Sl变为Sl +?

1 个答案:

答案 0 :(得分:1)

经过研究,我发现我们可以添加“preexec_fn = os.setsid”,它解决了这个问题。

subprocess.Popen(['ping www.google.com > /dev/null &'], shell=True, preexec_fn=os.setsid)