一位同事坚持认为我需要在使用Bash脚本中的wait()
生成多个子进程后调用&
。我相信关注的是,由于父进程在子进程之前就已经退出,它们将成为孤儿并留在僵尸状态。
我了解fork()
需要wait()
或waitpid()
才能正确删除它创建的文件描述符。但是,这真的需要Bash吗?这不是每个子进程运行的bash子shell负责吗?在我自己的实验中,我无法重新创建一个我创建的Bash子进程处于僵尸状态的情况。
答案 0 :(得分:2)
父母死亡的过程被重新归结为init
,当他们退出时最终会收获它们。导致僵尸进程的原因是当父进程继续生存时,但由于某种原因永远无法收获孩子。