孤儿进程
根据百度百科定义:孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。这些孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
代码演示:
import os
import time
def orphan():
"""
孤儿进程,父进程先于子进程退出,孤儿进程被1号init进程接管
:return:
"""
if os.fork() > 0: # parent
print('parent', os.getpid())
os._exit(0) # 父进程先退出
else: # child
print('child', os.getpid())
time.sleep(100)
if __name__ == '__main__':
orphan()
运行它
此时,通过ps命令查看进程的pid和ppid
可以看到child进程16088的ppid为0
僵尸进程
根据百度百科定义:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
代码演示:
# 僵尸进程演示
"""
子进程先于父进程退出,但父进程未回收子进程占用的资源,此时子进程将成为一个僵尸进程
"""
import os
import time
def zom():
"""
僵尸进程,子进程先于父进程退出,父进程未回收子进程的资源
:return:
"""
if os.fork() > 0: # parent
print("parent", os.getpid())
time.sleep(30)
# os.wait()
time.sleep(10)
else:
print("child", os.getpid())
os._exit(1)
if __name__ == '__main__':
zom()
运行它:
此时,通过ps命令查看进程的pid和ppid
为避免僵尸进程需要在父进程中wait子进程的退出