Bash 似乎不会创造僵尸。看起来进程被杀死后会立即收获。
我可以让 bash 制造僵尸吗?
我为什么要问:
我希望能够安全地终止子进程,或者kill -9
如果它在一段时间内没有终止,则可以安全地终止它,但我不想意外地终止不是我的子进程的进程。僵尸进程通常使它变得非常简单并且竞争条件安全。
答案1
创建僵尸进程:
$ (sleep 1 & exec /bin/sleep 10)
这会替换运行的 shell,sleep 1
它/bin/sleep 10
不会知道sleep 1
进程已终止,因此会创建一个僵尸 10 秒。
我不确定您对杀死僵尸进程有何期望。僵尸进程已经死了,你无法杀死它。
事实上,你可以让僵尸进程消失,但是通过杀死它的父进程,而不是僵尸进程本身。
答案2
不太有趣的答案:
$ (A=$BASHPID && ( kill -STOP $A ))
[1]+ Stopped ( A=$BASHPID && ( kill -STOP $A ) )
$ ps -C bash
PID TTY TIME CMD
29453 pts/0 00:00:00 bash
29593 pts/0 00:00:00 bash
29594 pts/0 00:00:00 bash <defunct>