多进程编程要注意僵尸进程。子进程没有可执行代码后将变成僵尸进程,如果父进程一直运行,又没有处理僵尸进程的代码,僵尸进程也将一直存在,消耗资源。僵尸进程无法通过kill命令杀掉。
import os
import time
pid = os.fork()
if pid:
print('In parent. sleeping...')
time.sleep(60)
print('parent done.')
else:
print('in child. sleeping...')
time.sleep(10)
print('child done') # 10秒后,子进程变成了僵尸进程
# watch -n1 ps a 当子进程成为僵尸进程时,显示为Z
# kill 试图杀死僵尸进程、父进进程,查看结果