Knowledge‎ > ‎

Linux - screen

screenコマンドでは以下のことができます
  • 一つのウインドウの中に、複数の仮想的なウインドウを作成でき、簡単な操作で切替えることができます
  • ネットワークが切断しても処理を継続できます (長時間かかるコマンドやシェルを実行し一旦切断し、あとで再接続することができる)
  • 複数の端末から1つのセッションを操作できます (リモート環境でダブルチェック時などに便利)

大まかに以下の流れで作業をします。
  • screenを起動する (自動的に1つのセッションが作成され、またその中で1つのウインドウが作成される)
  • セッションをデタッチしscreenを見かけ上終了する(裏で続行中)
  • セッションをアタッチし中断した作業を再開する
  • すべてのウインドウを終了しセッションを終了する
  • 別のところでアタッチ中のセッションに、(重複して)アタッチする

screenの起動

screen

任意のセッション名を付与してのscreenの起動

screen -S 任意のセッション名
「screen -ls」実行の際にセッション名で表示される為、分かりやすくなる。また、アタッチの際もこの名前を使用できる。

screenの中断(detach)

Ctrl+a, d
Ctrl+a, Ctrl+d

screenセッションの一覧表示

screen -ls

screenの再開 (attach)

screen -r [接続ID]
接続IDはデタッチ候補が1つだけの場合には省略可。接続IDは一意に絞られるならば「pid.tty.host」「pid.tty」「pid」「tty.host」「tty」のどの書き方でもOKです。既にアタッチされている場合にはエラーになる。

強制アタッチ

screen -d -r [接続ID]
対象セッションが別画面から既にアタッチされている場合、その画面の接続を切断したうえでアタッチする。既にログインしている人を追い出すようなイメージ。

重複アタッチ

screen -x [接続ID]
既に別のところでアタッチされているセッションに対し、重複してアタッチする。つまり2つ以上2つの画面から1つのセッションに接続することになる※対象セッションがアタッチされていない場合は「-r」と同じ動き。

screenセッションの終了

exit (すべてのウインドウで)
Ctrl+a, Ctrl+\
※「Ctrl+a, Ctrl+\」は私の環境では使えませんでした。

ウインドウの操作

新しいウインドウの作成

Ctrl+a, c
Ctrl+a, Ctrl+c

ウインドウの切り替え

# 次のウインドウ (next)
Ctrl+a, Ctrl+n
Ctrl+a, n
Ctrl+a, space

# 前のウインドウ (prev)
Ctrl+a, Ctrl+p
Ctrl+a, p
Ctrl+a, h
Ctrl+a, BackSpace

# 直前に作業していたウインドウ
Ctrl+a, Ctrl+a

ウインドウ番号を指定しての切り替え

# ウインドウ一覧の表示
Ctrl+a, "

# ウインドウ一覧の表示
Ctrl+a, ウインドウ番号

※ウインドウの切替え方法はいろいろありますが1つ覚えておけば十分だと思います。

現在のウインドウの終了

exit
Ctrl+a, k
Ctrl+a, Ctrl+k
※「Ctrl+a, k」「Ctrl+a, Ctrl+k」は私の環境では使えませんでした。

何らかの理由で操作できなくなったとき

理由はよくわからないのですが、操作を受け付けなくなってしまう状態になったことがあります。このときには以下の操作をしました。
  • screenコマンドのプロセスをkill
  • 「screen -ls」で一覧表示 (対象セッションが「Dead」と表示)
  • 「screen -wipe」で掃除 (対象セッションが「Removed」と表示)
  • 「screen -ls」で再度一覧表示 (対象セッションがなくなる)

※screenコマンドにはこれ以外にも本当にたくさんの機能があります。さらに詳しい説明は「man screen」で確認するか、他のサイトを参照してください。