![Linux子进程没有被剔除](https://linux22.com/image/49190/Linux%E5%AD%90%E8%BF%9B%E7%A8%8B%E6%B2%A1%E6%9C%89%E8%A2%AB%E5%89%94%E9%99%A4.png)
这导致 BSD 和 Linux 之间的脚本可移植性出现严重问题。
我在 CentOS 6.4 上发生了这种情况。
我有一个很好的紧凑测试用例:
bash -c "inotifywait -mcr . | sed s/CLOSE/z/"
ps uf
并观察:
\_ bash -c inotifywait -mcr . | sed s/CLOSE/z/
\_ inotifywait -mcr .
\_ sed s/CLOSE/z/
然后,找到bash父进程的PID,杀死它。
请注意 shell 提示符是如何返回的,表明我们的 shell 已完成对其子级的等待。
但是,如果您在文件系统上执行任何操作来触发 inotify 报告更多事件,它会继续转储到终端。在 OS X 上,这种情况不会发生,因为它们都会死掉。
ps uf
再次。看到 inotifywait 和 sed 现在都是 的子级init
。
这对我来说似乎完全错误。
POSIX 对此有何评论?