一.僵尸进程,孤儿进程(了解)
在linux中
僵尸进程是一种独特的数据结构
子进程运行完毕后,都会进入僵尸进程状态(此时子进程所打开的文件,占用的内存空间都会释放掉,但会保存子进程的PID号,占用cpu的总共时间等).因为父进程无法知道子进程什么时候结束,所以父进程需要在任意时间点指得到子进程的状态.等所有子进程都结束后成为僵尸进程,然后由父进程统一回收僵尸进程(回收pid等)
有害情况:
父进程进入死循环,子进程变成僵尸进程越来越多,父进程不发起回收僵尸进程的信号,子进程占用的pid不能释放,导致无法打开其他进程,此时的僵尸进程是有害的
不正常情况:
父进程立马结束了,子进程还在运行,此时子进程就变成了孤儿进程,最后会被init进程收养并回收.
二.守护进程
1.什么是守护进程
守护进程其实是一个子进程,它会伴随主进程的代码运行完毕后结束
2.为何用守护进程
当父进程需要将一个任务并发出去执行,需要将该任务放到一个子进程里
守护:当该子进程内的代码在父进程代码运行完毕后就没有存在的意义了,就应该将该子进程设置为守护进程,会在父进程代码结束后结束.
import time
from multiprocessing import Process
def task(name,n):
print('%s is running'%name)
time.sleep(n)
print('%s is done'%name)
if __name__ == '__main__':
p1 = Process(target=task,args=('守护进程',3))
p2 = Process(target=task,args=('子进程2',1))
p3 = Process(target=task,args=('子进程3',2))
p1.daemon = True
p1.start()
p2.start()
p3.start()
p2.join()
p3.join()
print('主')