web-dev-qa-db-ja.com

既存のスクリーンセッションへの再接続

画面の下でプログラムを実行しています。実際、セッションからデタッチしてnetstatを確認すると、プログラムがまだ実行されていることがわかります(これが目的です)。

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/Ruby       

次に、そのプロセスを実行しているセッションに再接続します。そこで、新しいターミナルを起動し、screen -rと入力します

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.Host" to resume one of them.

しかし、作成したプロセスを実行しているセッションがどれであるかをどのようにして知ることができますか?

今、私が出会った文書の一つは言った:

「ウィンドウを使用している場合は、Ca Aと入力して名前を付けます。この名前はウィンドウリストで使用され、多くのウィンドウを使用し始めたときに各ウィンドウで何をしているかを覚えやすくなります。 」

問題は、新しいスクリーンセッションにいるとき、Ctrl + Aを押しても何も起こらないことです。

78
JohnMerlino

ここには「リスト」の2つのレベルがあります。最初に、個々のセッション内に「ウィンドウリスト」があります。これはctrl-A Aの目的です。次に、質問に貼り付けたものとscreen -lsで表示できる「セッションリスト」があります。 。

-Sパラメーターを使用してセッション名をカスタマイズできます。それ以外の場合は、ホスト名(teamviggy)を使用します。例:

$ screen

(デタッチするにはCtrl-A d)

$ screen -S myprogramrunningunderscreen

(デタッチするにはCtrl-A d)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

ボーナスとして、後で再接続するために-Sに渡す名前の明確な略語を使用できます。

screen -r myprog

myprogramrunningunderscreenセッションに再接続しています)

88
Paul

screen -rの再接続に失敗した場合がありました。 -dフラグを追加して、次のようにしました

screen -d -r

私のために働いた。前の画面を切り離し、再接続できました。詳細については、マニュアルページを参照してください。

32
njcwotx

簡単な方法は、単に任意の画面に再接続することです

screen -r

その後、画面を実行したら、Ctrl-A "(つまり、control-Aの後に二重引用符を押す)を押すと、すべてのアクティブな画面のリストを取得できます。その後、アクティブな画面を一度に1つずつ選択して、実行中の画面を確認できます。もちろん、画面に名前を付けると、正しい画面を簡単に識別できます。

ちょうど私の2セント

12
Dr K

複数のクラスターの複数のマシンで作業する必要がある場合、次のコンボを使用する傾向があります。

screen -S clusterX

これにより、環境を構築できる新しいスクリーンセッションが作成されます。

screen -dRR clusterX

これは、そのスクリーンセッションに再接続するために後で使用するものです。気の利いたビットは、セッションが他の場所に接続されている場合、その他のディスプレイを切り離します。さらに、なんらかの奇妙な理由でセッションが存在しない場合(誰かが知らないうちにサーバーをリブートしたなど)、セッションが作成されます。最後に。複数のセッションが存在する場合、最初のセッションが使用されます。

https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions このヒントについてはしばらく前に感謝します。

編集:

また、暗号パラメータに関するman screenからのいくつかの有用な説明もあります。

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

-Dには他にもありますので、必ずman screenを確認してください

4
Lefty G Balogh
screen -d -r 4964

または

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
1
Vlad Kogan

screen -listの出力は、pid.tty.Hostのようにフォーマットされます。 pidを使用して、pstreeで最初の子プロセスを取得できます。

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

このようなリストを取得します

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...
1
tilnam