import os
parent_pid = os.getpid()
print "[parent] starts PID: %d" % (parent_pid, )
forked_pid = os.fork()
if forked_pid == 0:
print "[child] child process can't use os.fork() PID, since it's %d" % (forked_pid, )
print "[child] but it can reevaluate os.getpid() to get it's own PID: %d" % (os.getpid(), )
else:
print "[parent] parent process have created child with PID: %d" % (forked_pid, )
如果我不在第6行(forked_pid = os.fork()
)处设置断点-我从子进程中获取日志,但是如果我进行调试-forked_pid永远不会等于0。
原因,我开始研究这个问题。
p = Process(target=self.run_threaded_io, args=(additional_threads,))
p.start()
p.join()
我有这段代码,其中run_threaded_io
的日志消息永远不会打印-那是因为
class Popen(object):
def __init__(self, process_obj):
sys.stdout.flush()
sys.stderr.flush()
self.returncode = None
self.pid = os.fork()
if self.pid == 0:
if 'random' in sys.modules:
import random
random.seed()
code = process_obj._bootstrap()
sys.stdout.flush()
sys.stderr.flush()
os._exit(code)
如果pid不为0-process_obj._bootstrap()
则永远不会发生-在内部将在run
上调用target
即run_threaded_io
并加入主进程({{1 }})永远不会完成。而且我快要超时了。
答案 0 :(得分:0)
在这种情况下,父进程不等待子进程执行。因此,父级将完全执行并退出,而不会显示子级执行的任何结果。
您可以使用os.wait()
等待孩子完全执行。