2012-05-21 100 views
9

只是想知道是否有人能帮助我。我遇到的问题是我os.fork()获取几位信息并将它们发送到一个文件,但检查是否fork工作不正常。Python检查fork()过程是否完成

import sys 
import time 
import os 
import re 


ADDRESS = argv[1] 
sendBytes = argv[2] 


proID2 = os.fork() 
if proID2 == 0: 
    os.system('ping -c 20 ' + ADDRESS + ' > testStuff2.txt') 
    os._exit(0) 

print proID2 

finn = True 
while finn == True: 
time.sleep(1) 
finn = os.path.exists("/proc/" + str(proID2)) 
print os.path.exists("/proc/" + str(proID2)) 
print 'eeup out of it ' + str(proID2) 

我认为os.path.exists()可能不是正确的使用方法。

谢谢。

+1

检查/ proc/### /是否存在没有好的解决方案。没有定义PID是什么问题。在您的孩子终止后,下一个过程开始(可能完全独立于您的应用程序)*可以*获得相同的PID。通常情况下,它们是在周转时发布的,所以对于当前的内核,您的解决方案将最有可能始终工作,但您无法确定未来的内核版本或特殊情况下的情况,例如将计算机置于睡眠模式时,由于网络延迟,无响应的服务器或类似应用程序,相当一段时间,应用程序停滞不前。 – Alfe

回答

12

要等待子进程终止,请使用os.waitXXX()函数之一,如os.waitpid()。这种方法是可靠的;作为奖励,它会给你状态信息。

8

虽然你可以使用os.fork()os.wait()(见下面的例子),你很可能使用来自subprocess模块的方法更好。

import os, sys 

child_pid = os.fork() 
if child_pid == 0: 
    # child process 
    os.system('ping -c 20 www.google.com >/tmp/ping.out') 
    sys.exit(0) 

print "In the parent, child pid is %d" % child_pid 
#pid, status = os.wait() 
pid, status = os.waitpid(child_pid, 0) 
print "wait returned, pid = %d, status = %d" % (pid, status)