docker僵尸进程
-
子进程结束后,父进程没有回收该进程资源(父进程可能没有wait),子进程残留资源存放与内核中,就变为僵尸进程(zombie)
-
场景分析:python脚本A中执行B应用,将A部署在docker中,在yml文件中COMMAND:[“A”]进行运行A
-
进入容器中,docker exec -it test bash,发现A的pid为1,0是init
-
若A中执行B的方式是os.system(“/usr/bin/B”),会发现B的ppid是1,手动kill 掉B服务,B就会出现僵尸进程情况(并且无法被kill掉)。因为os.system不具有回收资源功能
-
若A中执行B的方式是subprocess.run([“/usr/bin/B”], shell=True),会发现B的ppid是一个bash,手动kill 掉B服务,B资源会被bash进行回收,bash同时也会运行结束;
-
-
docker中直接启动应用和使用bash启动应用的区别就是是否具有回收资源