Bootstrap

docker 僵尸进程问题

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启动应用的区别就是是否具有回收资源

;