Unixバックグラウンドプロセスが終了直後に終了行を印刷しないのはなぜですか?

Unixバックグラウンドプロセスが終了直後に終了行を印刷しないのはなぜですか?

たとえば、次のように実行すると:

sleep 1 & sleep 2 & sleep 3

私はすぐに次のプロセスIDを取得します。

[1] ...
[2] ...

sleep 3次に、実行が完了するまでシェルが停止し、同時に次のものを印刷します。

[1]-  Done                    sleep 1
[2]+  Done                    sleep 2

この動作を引き起こす基本的な実装が何であるか疑問に思います。

答え1

シェルの待機は、バックsleepグラウンドのない最後のシェルによって引き起こされます。

情報

[1]-  Done                    sleep 1
[2]+  Done                    sleep 2

通常、印刷は便利な時間に行われ、ほとんどのメッセージが表示されたときに行われます。努力する

sleep 3 &

そして10まで数える。出力は生成されません。ただし、Enterキーを押すと新しいプロンプトが表示され、その前にメッセージが表示されますDone

これはあなたが経験しているのと同じ状況です。

関連情報