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


81

画面の下でプログラムを実行しています。実際、セッションからデタッチして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を押しても何も起こらないことです。


複数の開いている画面のリストから1つを選択する高速な方法のscreen -r後には、その画面のリスト番号1、2、3 ...が続きます。
user18099

回答:


91

ここには「リスト」の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セッションに再接続されました)


そのctrl + aaはあなたのために働きますか?Ctrl + aを同時に押した後、すぐにもう一度aを押すと何も起こりません。
ジョンメルリーノ

はい; との間に違いがctrl-A aありctrl-A shift-Aます。後者は私に促しましたSet window's title to:。2番目のAのシフトを押していることを確認してください
ポール

私は、「screen -r 21tweet」を実行し、応答として「3239.21tweet(08/21/2015 09:14:35 AM)(添付)画面があり、21tweetに一致する再開画面はありません。」これは何でしょうか?
マイケル

スクリーンセッションに名前を付ける際の非常に明白な警告-Sは、で名前を付ける場合、自動的に再開するとき、スクリーンセッションのフルネームのID番号とドットに続く名前の少なくとも明確な省略形を使用する必要があることです。生成されたセッション名。IDとドットを含めることができます。
スペンサーウィリアムズ

1
タイプミス、修正。また、このサイトでは、追加のテキストがなければ短いコメントを投稿できません。
ポール

37

screen -r再接続に失敗したケースがありました。-dこのように見えるようにフラグを追加します

screen -d -r

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


12

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

screen -r

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

ちょうど私の2セント


Okieスクリーンの名前は?
オースティン

@austin画面-S <セッション名>
ブライアン

4

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

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


2

の出力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
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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.