是否可以推迟 bash 中后台进程的收获?

是否可以推迟 bash 中后台进程的收获?

如果我只是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

相关内容