fork()后会出现子进程,父子进程都打印Hello World!,所以会有两行相同的内容输出。
import os
print('starting...')
os.fork() # 生成子进程,后续代码同时在父子进程中执行
print('Hello World!')
可以根据fork()返回值判断是父进程,还是子进程
import os
print('starting...')
pid = os.fork() # 返回值是个数字,对于父进程,返回值是子进程PID,子进程是0
if pid:
print('In parent') # 父进程执行的代码
else:
print('In child') # 子进程执行的代码
print('Done') # 父子进程都会执行的代码
多进程编程时,要明确父子进程的工作。如:父进程只用于fork子进程;子进程做具体的工作,如果在循环结构中,做完后要退出,否则子进程还会再产生子进程、孙进程……子子孙孙无穷匮也,系统崩溃。
import os
for i in range(5):
pid = os.fork() # 父进程的工作是生成子进程
if not pid: # 如果是子进程,工作完后,结束,不要进入循环
print('hello')
exit() # 注释这一行执行,查看结果,分析原因