プロセスが「&」で開始されると、bash は新しいプロセスをフォアグラウンド グループに短時間配置し、その後自身をフォアグラウンド グループに戻します。
私の知る限り、「&」バックグラウンド演算子なしで外部コマンドを実行すると、シェルはコマンドの新しいプロセス グループを作成し、このプロセス グループが現在フォアグラウンドにあることを端末に通知します。「&」を指定して実行する場合、フォアグラウンド プロセス グループを変更してはなりません。
LinuxでCプログラムを使用しました。これは、フォアグラウンドプロセスグループと独自のプロセスグループを開始時に印刷し、スリープ後に同じものを印刷します。
次の結果が得られます。
tcgetpgrp=19981 getpgrp=19981
sleep(5)
tcgetpgrp=11996 getpgrp=19981
この例では、11996 が bash の pid です。
この動作に気付いたのは、 as(./test&)
および高負荷下で実行した場合のみです ( as ではありません./test&
)。
bash は正しい方法で動作していますか?
バッシュのバージョン: 4.4.12
編集
@Costi によって提案された pid 値を追加しました。
tcgetpgrp=29148 getpgrp=29148 getpid=29149
sleep
tcgetpgrp=28566 getpgrp=29148 getpid=29149
28566 は bash の pid です