人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

GNUScreenについて。SSHクライアントからサーバー上のプログラムを実行したとき、通信が切れるとプログラムも止まってしまいますが、GNUScreenを使用している場合はそのまま動き続けています。どういう仕組みなのでしょうか

●質問者: dedara
●カテゴリ:コンピュータ インターネット
✍キーワード:SSH クライアント サーバー プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY

screen を起動すると、2つのプロセスが作られ、1つは daemon として動作し続け、仮想の制御端末を提供するので、screen の中で実行されるプログラムは止まらない、といった感じです。


ssh で繋いで screen を起動すると、動作中のプロセスは下記のようになります。

$ ps -lu july
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
5 S 500 29262 29260 0 75 0 - 2884 stext ? 00:00:00 sshd
0 S 500 29263 29262 0 75 0 - 1433 wait pts/3 00:00:00 bash
5 S 500 29334 29329 0 78 0 - 2884 stext ? 00:00:00 sshd
0 S 500 29335 29334 0 75 0 - 1433 wait pts/1 00:00:00 bash
0 S 500 29526 29335 0 75 0 - 2485 pause pts/1 00:00:00 screen
1 S 500 29527 29526 0 79 0 - 2522 stext ? 00:00:00 screen
0 S 500 29528 29527 0 85 0 - 1466 - pts/2 00:00:00 bash
0 R 500 29577 29263 0 77 0 - 1363 - pts/3 00:00:00 ps

PID が 29526 と 29527 の2つの screen があり、29527 の方は TTY(制御端末)が「?」になっています。つまり、29527 の screen は、制御端末が切り離されたプロセスになっています。この 29527 の screen の子プロセスとして、29528 の bash が動いています。この 29528 の bash の制御端末は pts/2 となっていますが、この「pts/2」が screen が作った仮想制御端末です。


なお、上記の例だと、pts/1 が最初に ssh で繋いだ時に sshd が作る仮想端末、pts/3 が後から ssh で繋いだ時に作られた仮想端末です。


ここで、デタッチすると、プロセスは下記のように代わります。

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
5 S 500 29262 29260 0 75 0 - 2884 stext ? 00:00:00 sshd
0 S 500 29263 29262 0 75 0 - 1433 wait pts/3 00:00:00 bash
5 S 500 29334 29329 0 75 0 - 2884 stext ? 00:00:00 sshd
0 S 500 29335 29334 0 78 0 - 1433 - pts/1 00:00:00 bash
1 S 500 29527 1 0 78 0 - 2522 stext ? 00:00:00 screen
0 S 500 29528 29527 0 85 0 - 1466 - pts/2 00:00:00 bash
0 R 500 29684 29263 0 77 0 - 1363 - pts/3 00:00:00 ps

29526 の screen は無くなり、その結果、29527 のスクリーンの親プロセス(PPID)が 1 になりました。これで、29527 の screen は daemon プロセスと同じ状態になりました。


ここで、screnn を起動した側の ssh の接続を切ります。

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
5 S 500 29262 29260 0 78 0 - 2884 stext ? 00:00:00 sshd
0 S 500 29263 29262 0 75 0 - 1433 wait pts/3 00:00:00 bash
1 S 500 29527 1 0 78 0 - 2522 stext ? 00:00:00 screen
0 S 500 29528 29527 0 85 0 - 1466 - pts/2 00:00:00 bash
0 R 500 29742 29263 0 77 0 - 1363 - pts/3 00:00:00 ps

29527 の screen が pts/2 を提供し続け、その pts/2 を制御端末とし、29527 の screen の子供として bash が動きつづけている事が分かると思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ