screenで既存のセッションを指定してアタッチするとき、 基本的なやり方は以下のように指定します。
screen -r <PID>
しかし、既にAttached状態のセッションに対しては、 単純にrオプションだけでアタッチしようとしてもアタッチできません。 確認してみます。
$ screen -ls
There is a screen on:
2737.ttys001.chesapeake (Attached)
1 Socket in /var/folders/1b/gs6_s1813g97d6kjfhwqvyx80000gn/T/.screen.
このように既にAttached状態のセッションがあります。 これに-rオプションだけで接続しようとしてみます。
$ screen -r 2737
There is a screen on:
2737.tts0y01.chesapeake (Attached)
There is no screen to be resumed matching 2737.
レジュームできません。
このようなAttached状態のセッションに接続する方法として、 以下の2つの方法があります。
それぞれのやり方を見ていきます。
Attached状態のセッションをいったんデタッチするというのが最初のやり方です。
セッションを確認します。Attachedになっています。
$ screen -ls
There is a screen on:
2737.ttys001.chesapeake (Attached)
1 Socket in /var/folders/1b/gs6_s1813g97d6kjfhwqvyx80000gn/T/.screen.
接続したいセッションをデタッチします。
$ screen -d 2737
[2737.ttys001.chesapeake detached.]
セッションを確認します。detachedになっているはずです。
$ screen -ls
There is a screen on:
2737.ttys001.chesapeake (Detached)
1 Socket in /var/folders/1b/gs6_s1813g97d6kjfhwqvyx80000gn/T/.screen.
ようやく-rオプションで指定ができます。セッションに接続します。
$ screen -r 2737
以上のやり方の中で、セッションをデタッチしてアタッチする部分は 一つのコマンドにまとめることが出来ます。
$ screen -ls
There is a screen on:
2737.ttys001.chesapeake (Attached)
1 Socket in /var/folders/1b/gs6_s1813g97d6kjfhwqvyx80000gn/T/.screen.
$ screen -dr 2737
ここで使用した-drオプションは必要であれば、いったんデタッチしてリタッチするという意味になります。
マルチディスプレイの機能を使うと、既存のAttachedセッションに加えて、 同じセッションをほかのところからも利用することができます。 マルチディスプレイを使用するには-xオプションを使用します。 さらにrオプションまたはRオプションを使います。 rオプションは該当するセッションがなければ、それで終了しますが、 Rオプションは、なければ新たなセッションを作成します。
$ screen -xr <PID>
または、
$ screen -xR <PID>
xオプションを使用してマルチディスプレイモードでscreenセッションにアタッチすると、 複数のターミナル上で同じ画面を共有することになります。 どちらかで行った操作は、別のターミナルにも同期されています。
以下の状態で複数のターミナルウィンドウからアタッチしてみてください。
$ screen -ls
There is a screen on:
2850.ttys001.chesapeake (Detached)
1 Socket in /var/folders/1b/gs6_s1813g97d6kjfhwqvyx80000gn/T/.screen.
両方の画面で同じコンソールを操作できると思います。