僵尸进程与孤儿进程
from multiprocessing import Process import time import os def task(name): # os.getppid()查看父进程编号 print("%s is running, parent id is <%s>" % (os.getpid(), os.getppid())) # os.getpid()查看自己进程编号 time.sleep(3) # 模拟任务运行一段时间 print("%s is done, parent id is <%s>" % (os.getpid(), os.getppid())) if __name__ == "__main__": # windows 一定要把开启指令放到main下面 Linux无所谓 # Process(target=task, kargs={"name" : "子进程"}) # 方式1 p = Process(target=task, args=("子进程1",)) # 方式2 实例化得到一个对象 p.start() # (仅仅只是给操作系统发送了一个信号)开启子进程,帮你执行task print("主", os.getpid(), os.getppid()) # 此时的父进程是pycharm
父进程的运行过程中开了子进程,这两个进程共用一个打印终端。父进程打印完 主 14140 124 后并没有结束掉。等着子进程运行完后,主进程才会结束。
父进程任何时候查看子进程都能找到(僵尸进程)。子进程结束掉后,留一个状态信息。父进程结束后会清理掉所有信息。
僵尸进程缺点:多个pid被占。如果父进程一直不死,就会有害
孤儿进程:子进程没结束,父进程结束。在Linuxs系统中有一个init进程,是所有进程的父进程。此时,子进程的状态信息由init进程接管
孤儿进程无害,僵尸进程有害。