如果我只是sleep 1 &
在 bash 中运行,该sleep
进程几乎会在它死后立即被收获。无论作业控制是启用还是禁用,都会发生这种情况。有没有办法让 bash 推迟收获过程,直到我做类似wait
或 的事情fg
?例如:
sleep 1 &
sleep 2
ps -ef | grep defunct # I want this to show the sleep 1 process
wait
ps -ef | grep defunct # But now it should be gone
答案1
我不确定您为什么想要这样做,但您可以插入另一个进程来获取子进程,然后暂停该进程,使其无法处理 SIGCHLD 信号。例如:
bash -c 'sleep 1 & kill -STOP $$' &
pid=$!
sleep 2
ps -ef|grep defunct
ps f
kill -CONT $pid
ps f
显示T
和状态的输出Z
将是
8023 pts/2 S+ 0:00 \_ /bin/bash mytest
8024 pts/2 T+ 0:00 \_ bash -c sleep 1 & kill -STOP $$
8026 pts/2 Z+ 0:00 | \_ [sleep] <defunct>
8029 pts/2 R+ 0:00 \_ ps f