标签:僵尸 pyc 内核 阶段 创建 必须 就会 运行 process
僵尸进程:
当子进程优先于父进程结束,因为这段期间父进程未调用wait()或waitpid()的这段期间,这些子进程就叫做僵尸进程。
因为只有当父进程结束时,才会去调用wait()或waitpid()去清理自己子进程的僵尸进程。
每个子进程都会经历僵尸进程。
查看进程是否是僵尸进程的命令:
ps -eo pid,ppid,args,command,stat | grep 907
僵尸进程有害: 比如一个父进程永远不结束,那么就会有很多僵尸进程,占用进程的数量。当进程数目达到一定数量之后,系统就无法再创建新的进程。
1 from multiprocessing import Process 2 import time 3 import os 4 5 6 class MyProcess(Process): # 继承Process类 7 def __init__(self, name): 8 super().__init__() 9 self.name = name 10 11 def run(self): # 必须重写run方法 12 print(‘%s is running; 父进程id是:%s‘ % (os.getpid(), os.getppid())) 13 time.sleep(1) 14 print(‘%s is ending; 父进程id是:%s‘ % (os.getpid(), os.getppid())) 15 16 17 if __name__ == ‘__main__‘: 18 p = MyProcess(‘xxx‘) 19 p.start() # start自动绑定到run方法 20 print(‘主进程ID是:%s; 主进程的父进程ID是: %s‘ % (os.getpid(), os.getppid())) # 主进程的父进程是pycharm或执行该脚本的进程 21 time.sleep(60) 22 exit() 23 24 # 输出结果: 25 # 主进程ID是:906; 主进程的父进程ID是: 540 26 # 907 is running; 父进程id是:906 27 # 907 is ending; 父进程id是:906 28 29 # 在父进程未结束之前,查看子进程的状态,是Z僵尸进程 30 # BealladeAir:~ beallaliu$ ps -eo pid,ppid,args,command,stat | grep 907 31 # 907 906 (Python) (Python) Z 32 # 909 803 grep 907 grep 907 R+
孤儿进程: 某种情况下,父进程比子进程优先结束,那么子进程就没有父亲了。系统就会将子进程托管给init进程(孤独院),该子进程就叫孤儿进程。
孤儿进程对系统无害。因为孤儿进程只是由父进程变成init这个继父进程管理。
标签:僵尸 pyc 内核 阶段 创建 必须 就会 运行 process
原文地址:https://www.cnblogs.com/beallaliu/p/9189926.html