分叉和退出python中的孩子

时间:2014-11-12 15:14:13

标签: python fork system exit

我试图分叉一个进程,在子进程中执行某些操作然后从中退出(请参阅下面的代码)。要退出,我首先尝试了sys.exit,结果证明是一个问题,因为中间函数捕获了SystemExit异常(如下面的代码所示),所以孩子实际上没有终止。我想我应该使用os._exit代替。现在,孩子终止了,但我仍然看到周围存在已解决的过程(当我做ps -ef时)。有没有办法避免这些?

import os, sys

def fctn():
    if os.fork() != 0:
        return 0
#   sys.exit(0)
    os._exit(0)

while True:
    str = raw_input()
    try:
        print(fctn())
    except SystemExit:
        print('Caught SystemExit.')

编辑:这实际上不是一个Python问题,而是更多的Unix问题(所以我猜结果可能因系统而异)。伊万的回答表明我应该做一些像

这样的事情
def handleSIGCHLD(sig, frame):
    os.wait()

signal.signal(signal.SIGCHLD, handleSIGCHLD)

虽然对我来说很简单

signal.signal(signal.SIGCHLD, signal.SIG_IGN)

也有效。

然后我可能应该使用一些库......

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

最好根据需要使用子进程模块。它是分离过程的首选方式。

https://docs.python.org/2/library/subprocess.html#subprocess.check_call