1
neoblackcap 2017-10-31 10:57:52 +08:00 2
我来一一说明你的问题
1. Popen.wait()只是告诉主进程要等待子进程,真正的意义是主进程要去清理子进程结束后剩余的信息,主进程不一定会接着退出。 2. 僵尸进程是由于主进程没有调用 wait 而导致的。那么主进程没有调用 wait 是不是一定会出现僵尸进程呢?答案是不一定,因为主进程早于子进程退出,那么子进程就成了孤儿进程,孤儿进程会被 init 进程(pid 1)托管然后 init 进程会对这些孤儿进程进行 wait。 2.1 回到你的问题,若有调用 wait,那么这个子进程必然不会成为僵尸进程。 2.2 剩下没有 wait 的子进程但是又没有成为僵尸进程显然就是主进程早于它退出了,它被 init 收养罢了 2.3 子进程成为了僵尸进程,但是主进程没有退出,显然就是主进程没有调用 wait 罢了。 3. 你的分析还算是对,但是你的结论却有问题,这个你还是得看我的第二点。要不然你的结论如何解释你的第一个场景呢? |
2
linhanqiu OP @neoblackcap 多谢,
|
3
lolizeppelin 2017-10-31 22:19:30 +08:00 via Android
不用乱想 这些都不是 python 的知识
自己看 linux 相关系统调用就明白了 |