Home
1450 words
7 minutes
【Unix】screenコマンドの解説
2025-02-22

最終更新:2025-02-22

screenコマンドは、Unix系システムにおいて仮想ターミナルを多重化し、複数のシェルセッションを同時に実行・管理するためのツールである。

これにより、一つの物理ターミナル上で複数の作業環境を並行して利用可能となり、リモート作業や長時間実行中のプロセス管理に大いに役立つ。さらに、セッションのデタッチ(切り離し)および再アタッチ(再接続)により、物理的な接続が途切れても作業を継続できるメリットがある。


使用方法#

使用方法は、何もオプションを指定せずに screen と実行する方法である。これにより新たなセッションが開始される。

screen

セッション開始後、ユーザーはその中でシェルコマンドを実行できる。セッションを終了させずに一時的に切り離す場合は、キーボードショートカットを利用する。

デタッチ方法(通常時)

  • キーシーケンス: Ctrl+A を押した後に D キーを押す。
    これにより、「Detached from [セッション名]」と表示され、セッションはバックグラウンドに残る。

コマンドが入力できない状況下でのデタッチ方法

  • もしキー入力が通らず、通常の方法でデタッチできない場合は、物理的にターミナルエミュレータを再起動するか、別のコンソールから予約された screen セッションに再アタッチする。
  • あるいは、SSH経由で接続している場合は、サーバ側からプロセスを信号でデタッチさせる方法(例として、kill -SIGUSR1 <pid> を利用する)も考えられるが、これは環境毎に設定やカスタマイズが必要となるため、基本的には Ctrl+A D シーケンスを用いるのが推奨される。

主なオプションとその具体例#

1. セッションの名前付け (-S)#

-S オプションを用いると、セッションにわかりやすい名前を付与できる。名前付けすることで、後から対象のセッションに簡単に再アタッチ可能となる。

screen -S mysession

出力例:#

セッション開始後、ターミナル画面に以下のような情報が表示される(環境により異なる):

[screen is terminating]
There is a screen on:
    12345.mysession   (Detached)

ここで 12345 はプロセスIDで、mysession は指定したセッション名である。


2. セッション一覧表示 (-ls)#

現在実行中またはデタッチされた全てのセッションを一覧表示するのに使用するオプションである。

screen -ls

出力例:#

There are screens on:
	12345.mysession     (Detached)
	67890.pts-0.hostname (Detached)
2 Sockets in /var/run/screen/S-ss0832.

各行には、セッションの【プロセスID.セッション名】と状態(通常は “Detached”)が表示される。


3. セッションへの再アタッチ (-r, -x)#

a. 単一セッションへの再接続 (-r)#

デタッチされたセッションに再度接続するために使用する。

screen -r mysession

出力例:#

There is a screen on:
	12345.mysession     (Detached)
Type "screen -r [pid.]tty.host" to resume it.

実行後、そのセッションに再びアタッチされる。

b. 複数アタッチ(同時接続) (-x)#

複数の端末から同じセッションに同時にアクセスする場合に利用する。

screen -x mysession

出力例:#

再アタッチ後の出力自体は通常のセッション画面と変わらないが、同時に複数の接続が可能となる。


4. セッションのデタッチ (-d)#

現在アタッチされているセッションを強制的にバックグラウンドに切り離すためのオプションである。

screen -d mysession

出力例:#

Detached from 12345.mysession.

これにより、セッションはデタッチされた状態で保持される。


5. デタッチと再アタッチの同時実行 (-dr)#

このオプションは、既にアタッチされているセッションがある場合も、一度全ての接続を切り離し、再アタッチする際に利用する。

screen -dr mysession

出力例:#

Reattached to 12345.mysession.

これにより、既存のセッションが強制的に再アタッチされる。


6. セッションのクリーンアップ (-wipe)#

不要となった死んだセッションや不整合なセッションソケットを削除するために使用する。

screen -wipe

出力例:#

Cleaning up dead screens...done.

これにより、存在しないセッションの情報が削除される。


ハンズオン#

以下に、screenコマンドの実際の操作手順を示す。実際にターミナルで試しながら、各操作の動作を確認することが望まれる。

演習1: 新しいセッションの作成と名前付け#

  1. ターミナルを開く。

  2. 以下のコマンドを入力し、mysession という名前のセッションを開始する。

    screen -S mysession
    
  3. 新しいシェルが開いたことを確認する。ここで、任意のコマンドを実行可能である。

演習2: セッションのデタッチと一覧表示#

  1. セッションをデタッチするために、Ctrl+A を押した後に D キーを押す。
    ※ キーボードショートカットが利用できない場合は、別の端末から再アクセスを試みるか、SSH経由で管理者に連絡すること。

  2. 別のターミナルを開き、以下のコマンドでセッション一覧を確認する。

    screen -ls
    
  3. 出力例に沿って、mysession が「Detached」と表示されることを確認する。

演習3: セッションへの再アタッチ#

  1. 以下のコマンドを実行し、先ほどの mysession に再アタッチする。

    screen -r mysession
    
  2. 再びセッションがアクティブになり、元の作業環境が復元されるのを確認する。

演習4: 複数セッション管理と強制再アタッチ#

  1. 複数のセッションを作成(例:screen -S session1screen -S session2 を別のターミナルまたは順次作成)。

  2. screen -ls により全体のセッション一覧を表示し、各セッションIDと名前を確認する。

  3. 既にアタッチされているセッションに対しては、以下のコマンドで再アタッチを試みる。

    screen -dr session1
    
  4. 出力例を確認し、セッションが強制的に再アタッチされることを理解する。

演習5: 不要なセッションのクリーンアップ#

  1. セッション管理が煩雑になった場合、以下のコマンドで死んだセッション等をクリーンアップする。

    screen -wipe
    
  2. 出力が「Cleaning up dead screens…done.」と表示されれば、不要なセッション情報が削除されていることを確認する。

【Unix】screenコマンドの解説
https://ss0832.github.io/posts/20250222_screen_command_guide/
Author
ss0832
Published at
2025-02-22