2014-04-06 100 views
1

我是python的新手機。最近,我遇到了Python Popen的一個問題,希望有人能幫助我。謝謝:d用Python的Popen創建後臺進程

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 

平過程中後臺運行與狀態S1。

現在我嘗試a.py

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

平過程中的狀態變化在SL +運行,如果我ctrl + c停止a.py,Ping的流程也被終止。

有什麼辦法可以讓ping進程在背景中運行,並且在停止a.py時不會受到影響嗎?以及爲什麼ping處理狀態從S1更改爲S1 +?

+0

你想創建一個[Unix的守護進程(https://pypi.python.org/pypi/python-daemon/)或者是不夠的,如果['ping'繼續​​運行後'一.py'退出](http://stackoverflow.com/q/13243807/4279)? – jfs

+0

@ J.F.Sebastian:謝謝你的建議。 :D 我發現添加參數「preexec_fn = os.setsid」可以解決問題。 –

回答

1

經過研究,我發現我們可以添加「preexec_fn = os.setsid」,它解決了這個問題。

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