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

おすすめ記事