対話型ログインセッションは制御端末を持てます。これはセッションに関連付けられ、端末が生成するシグナルとジョブ制御にカーネルが使う端末デバイスです。プロセス一覧の TTY フィールドから、この関連付けを確認できます。
プロセス · レッスン 2
ターミナルの制御
制御端末がセッションを対話入力、シグナル、シェルのジョブ制御へ結び付ける仕組みを学びます。
端末と疑似端末デバイス
TTY という名は歴史的なテレタイプに由来します。現代の Linux では、端末インターフェースは必ずしも物理機器ではなくデバイス抽象化です。
システムの仮想コンソールは tty1 のような名前になります。コンソール切り替えのショートカットはディストリビューションによって異なるため、決め付けてはいけません。端末エミュレーター、リモートログイン、マルチプレクサーは通常疑似端末のペアを使い、対話側は pts/3 のように表示されます。
現在のコマンドの標準入力へ接続された端末を表示します。
$ tty
/dev/pts/3
この結果は制御端末という広い概念と関連しますが、同一ではありません。プロセスは制御端末を持つセッションに残りながら、標準入力や出力をリダイレクトできます。
pts/3 のような名前は通常何を識別しますか?
セッション、プロセスグループ、ジョブ制御
制御端末は、ウィンドウを開いたコマンドだけでなくセッションに属します。セッション内で端末はフォアグラウンドプロセスグループを追跡します。シェルはフォアグラウンドのパイプラインをそのグループへ置き、入力を読み、端末生成シグナルを受け取れるようにします。
たとえば Ctrl-C を押すと、通常は端末ドライバーがフォアグラウンドプロセスグループへ SIGINT を送ります。バックグラウンドグループが端末を読み取ろうとすると SIGTTIN を受け取る場合があります。この規則でシェルがフォアグラウンド・バックグラウンドジョブを調整します。
端末は通常、Ctrl-C で生成したシグナルをどのプロセスへ送りますか?
`TTY` 列を読む
安定した表示が必要なら、プロセスフィールドを明示します。
$ ps -o pid,tty,stat,cmd
pts/3 のような名前は、そのプロセスに記録された制御端末です。? は通常、制御端末がないことを意味します。
サービスマネージャーが対話型ログインと独立して起動するため、多くのサービスプロセスは制御端末を持ちません。ただし TTY がないだけでデーモンとは断定できず、バックグラウンドのシェルジョブにも制御端末は残ります。
ps の TTY 列にある ? は通常何を意味しますか?
端末の切断とハングアップ
端末接続が消えると、カーネルや端末・セッションソフトウェアが関連プロセスへ SIGHUP を送る場合があります。プロセスは終了、捕捉、無視したり、あらかじめ生存するよう設定されていたりします。disown、nohup、マルチプレクサー、サービスマネージャーも動作へ影響します。
そのため、端末を閉じても、そこで開始した全コマンドが終了するとは限りません。永続性が重要なら、セッション、シグナル処理、リダイレクト、監督プロセスを調べます。
端末を閉じるとそこで開始した全プロセスが必ず終了する、という説明が不正確なのはなぜですか?
Linux プロセスの管理と監視 ラボでは、フォアグラウンド・バックグラウンドジョブと TTY フィールドを安全に比較できます。
レッスン完了
ターミナルの制御 を完了しました
制御端末と対話型プロセス管理を関連付けられるようになりました。
仮想端末と疑似端末を区別する。
端末シグナルをフォアグラウンドプロセスグループへ関連付ける。
ps出力の端末名と?を解釈する。端末の切断を、終了保証ではなくシグナル処理として扱う。