我是蟒蛇的新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 +?
答案 0 :(得分:1)
经过研究,我发现我们可以添加“preexec_fn = os.setsid”,它解决了这个问题。
subprocess.Popen(['ping www.google.com > /dev/null &'], shell=True, preexec_fn=os.setsid)