在某些Python代码中,我fork
并在子进程中进行一些处理,而父进程等待它退出。它不会exec
之后的fork
。
我在PyUnit中测试此代码时遇到问题,因为当子进程使用sys.exit
显式退出时,会产生PyUnit错误。
以下代码会产生问题
class TestClass(TestCase):
def test(self):
pid = os.fork()
if pid == 0:
sys.exit(0)
else:
os.waitpid(pid,0)
这是错误
Traceback (most recent call last):
File "test.py", line 15, in test
sys.exit(0)
SystemExit: 0
----------------------------------------------------------------------
Ran 1 test in 0.007s
FAILED (errors=1)
如果子进程明确退出,有没有办法避免PyUnit无法通过测试?
答案 0 :(得分:1)
sys.exit所做的就是抛出一个SystemExit异常,它会像往常一样冒泡。但是,os._exit(0)将立即退出,并且不会给任何清理代码提供运行的机会。这可以防止PyUnit做任何事情,包括测试失败。因此,在您的测试代码中,您可以捕获SystemExit并调用os._exit。
如果子进程希望在退出时进行一些显式清理,则必须安排在测试用例中执行此操作。