シェルのプロセスグループID =フォアグラウンドジョブのプロセスグループID?

シェルのプロセスグループID =フォアグラウンドジョブのプロセスグループID?

私は次の2つのソースから決定的に結論付けました:ShellのプロセスグループID =フォアグラウンドワークプロセスグループID。フォアグラウンドで実行するバックグラウンドジョブを選択すると、シェルのプロセスグループIDがフォアグラウンドジョブのプロセスグループIDに変更されますか、それともその逆に変更されますか?

1.

タスク制御ユーザーインターフェースの実装を容易にするために、オペレーティングシステムは現在の端末プロセスグループIDの概念を維持しています。このプロセスグループのメンバー(現在の端末のプロセスグループIDと同じプロセスグループIDを持つプロセス)は、SIGINTなどのキーボード生成信号を受け取ります。これらのプロセスは前景にあると言われています。バックグラウンドプロセスは、プロセスグループIDが端末プロセスグループIDと異なるプロセスである。これらのプロセスはキーボードから生成された信号の影響を受けません。(源泉)

2.

Unixシステム

次に追加:

$sleep 3000 &
$sleep 2000 &
$ps xao pid,ppid,pgid,sid,tty,comm | grep tty

PID     PPID    PGID    SID     TTY     COMMAND
1153    1135    1153    1153    tty1    bash
1173    1153    1173    1153    tty1    sleep
1189    1153    1189    1153    tty1    sleep
1219    1153    1219    1153    tty1    ps
1220    1153    1219    1153    tty1    grep

ベストアンサー1

私は次の2つのソースから決定的に結論付けました:ShellのプロセスグループID =フォアグラウンドワークプロセスグループID。

引用したソースのどれも、シェルのPGIDがフォアグラウンドジョブPGIDと同じであると主張していないため、これを行わないでください。

シェルのPGIDは変更されません。端末で対話型シェルを実行する場合、通常の状況では、シェルは独自のプロセスグループにあり、シェルのPGIDはシェルのPIDと同じです。

すべてのプロセスにはPGIDがあります。ターミナルに関連フォアグラウンドプロセスグループID。定義によると、フォアグラウンドプロセスグループはこのPGIDを持つプロセスグループです。

端末が端末エミュレータによって提供される場合、これは端末エミュレータプロセスのPIDとは関係がない。カーネルが完全に提供するハードウェア端末を考慮すると、これは明らかです。この場合、端末エミュレータプロセスはありません。

端末に関連付けられたPGIDを渡すことができます。tcsetpgrpシェルがフォアグラウンドで外部プログラムを起動したとき、またはを使用してタスクをフォアグラウンドに移動したときに呼び出される関数fg

おすすめ記事