
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