5

sshdは、子プロセスをフォークして新しいセッションを作成します。これがpstreeの出力(部分的)です:

sshd(1230) -- sshd(1234) -- bash
           (...)    
             |- sshd(1235) -- bash -- a.out -- a.out

「kill-91235」を実行した後、a.outが停止します(キャプチャされた信号はSIGHUPです)

なんで?

tks!

4

1 に答える 1

8

ssh(ターミナルエミュレータ、、、、およびその他のいくつかのプログラムとともにscreentmuxscriptpseudo-tty」(または「pty」)と呼ばれるものを使用します。これは、ダイヤルアップモデム接続のように動作します。これがこの動作の歴史的な原因であるため、このように説明します。何らかの理由でモデム接続が失われた場合、tty(またはpty)ドライバーがキャリアの喪失を検出し、セッションに送信SIGHUP( " Hangup")します。これにより、プログラムは状態を保存し(たとえば、vi/vimは変更したが回復のために保存しなかったファイルを保存します)、正常にシャットダウンできます。同様に、何らかの理由でネットワーク接続が切断された場合(誰かが電源ケーブルまたはネットワークケーブルを介してトリップした場合、またはsssh何らかの奇妙な理由でコアがダンプされた場合)、ptyはSIGHUPセッションに追加して、保存されていないデータを保存する機会を取得します。

技術的には、tty / ptyドライバーは、端末に接続されたプロセスグループ内のすべてのプロセスに信号を送信します(プロセスグループもシェルジョブ制御に関連していますが、これは本来の目的でした)。他のいくつかの端末信号も同じように処理されます。たとえば、Ctrl+C送信SIGINTCtrl+\送信SIGQUIT(およびCtrl+Z送信、および自分自身を一時停止してSIGTSTP処理しないプログラムが送信されます。この二重信号により、端末を編集モードから通常モードに戻すことができます。多くのターミナルエミュレータでは、事前編集画面バッファにスワップします)。SIGTSTPSIGSTOPvim

于 2011-04-03T03:48:07.790 に答える