Gắn lại vào một phiên màn hình hiện có


81

Tôi có một chương trình chạy dưới màn hình. Trong thực tế, khi tôi tách ra khỏi phiên và kiểm tra netstat, tôi có thể thấy chương trình vẫn đang chạy (đó là những gì tôi muốn):

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

Bây giờ tôi muốn gắn lại vào phiên chạy quy trình đó. Vì vậy, tôi khởi động một thiết bị đầu cuối mới và gõ màn hình -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.

Nhưng làm thế nào để tôi biết cái nào là phiên chạy quy trình mà tôi đã tạo?

Bây giờ một trong những tài liệu tôi đi qua nói:

"Khi bạn đang sử dụng cửa sổ, hãy nhập Ca A để đặt tên cho nó. Tên này sẽ được sử dụng trong danh sách cửa sổ và sẽ giúp bạn nhớ những gì bạn đang làm trong mỗi cửa sổ khi bạn bắt đầu sử dụng nhiều cửa sổ. "

Vấn đề là khi tôi ở trong một phiên màn hình mới, tôi cố gắng nhấn control + a A và không có gì xảy ra.


Một cách nhanh chóng để chọn một từ danh sách nhiều màn hình đang mở, screen -rtheo sau là số 1, 2, 3 ... trong danh sách màn hình đó.
user18099

Câu trả lời:


91

Có hai cấp độ của "danh sách" liên quan ở đây. Đầu tiên, bạn có "danh sách cửa sổ" trong một phiên riêng lẻ, đó là những gì ctrl-A A dành cho và thứ hai là "danh sách phiên" là những gì bạn đã dán trong câu hỏi của mình và những gì cũng có thể được xem screen -ls.

Bạn có thể tùy chỉnh tên phiên với -Stham số, nếu không, nó sử dụng tên máy chủ của bạn (teamviggy), ví dụ:

$ screen

(ctrl-A d để tách ra)

$ screen -S myprogramrunningunderscreen

(ctrl-A d để tách ra)

$ 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.

Là một phần thưởng, bạn có thể sử dụng tên viết tắt rõ ràng của tên bạn chuyển đến -Ssau này để kết nối lại:

screen -r myprog

(Tôi được kết nối lại với myprogramrunningunderscreenphiên)


Đó là ctrl + aa làm việc cho bạn? Tôi nhấn control + a cùng một lúc và sau đó nhanh chóng nhấn lại và không có gì xảy ra.
JohnMerlino

Đúng; có một sự khác biệt giữa ctrl-A actrl-A shift-A. Cái sau nhắc tôi đến Set window's title to:. Hãy chắc chắn rằng bạn đang nhấn shift cho lần thứ hai A.
Paul

Tôi làm: "screen -r 21tweet" và nhận làm phản hồi: "Có một màn hình vào: 3239,21tweet (21/08/2015 09:14:35 AM) (Đã đính kèm) Không có màn hình nào được nối lại phù hợp với 21tweet." nó có thể là gì?
Michael

Một cảnh báo rất không rõ ràng với các phiên màn hình đặt tên là nếu bạn đặt tên cho chúng -S, bạn phải sử dụng ít nhất một chữ viết tắt rõ ràng của tên theo số ID và chấm vào tên đầy đủ của phiên màn hình khi tiếp tục, không giống như tự động tên phiên được tạo, trong đó bạn có thể bao gồm ID và dấu chấm.
Spencer Williams

1
Typo, cố định. Và trang web này sẽ không cho phép tôi đăng một bình luận ngắn mà không có một số văn bản bổ sung.
Paul

37

Tôi đã có một trường hợp screen -rthất bại để gắn lại. Thêm -dcờ để nó trông như thế này

screen -d -r

đã làm cho tôi. Nó tách màn hình trước đó và cho phép tôi gắn lại. Xem Trang Man để biết thêm thông tin.


12

Một cách dễ dàng là chỉ cần kết nối lại với một màn hình tùy ý với

screen -r

Sau đó, khi bạn đang chạy màn hình, bạn có thể nhận được một danh sách tất cả các màn hình đang hoạt động bằng cách nhấn Ctrl-A "(tức là control-A theo sau là một trích dẫn kép). Sau đó, bạn có thể chỉ cần chọn từng màn hình hoạt động và xem những gì chúng đang chạy. Đặt tên cho màn hình, tất nhiên, sẽ giúp dễ dàng xác định đúng.

Chỉ hai xu của tôi


okie làm thế nào tôi đặt tên màn hình của tôi?
austin

Màn hình @austin -S <tên phiên>
Brian

4

Tôi có xu hướng sử dụng kết hợp sau đây khi tôi cần làm việc trên một số máy trong một số cụm:

screen -S clusterX

Điều này tạo ra phiên màn hình mới nơi tôi có thể xây dựng môi trường.

screen -dRR clusterX

Đây là những gì tôi sử dụng sau đó để gắn lại vào phiên màn hình đó. Các bit tiện lợi là nếu phiên được gắn ở nơi khác, nó sẽ tách ra màn hình khác. Hơn nữa, nếu không có phiên vì một lý do kỳ quặc nào đó, như ai đó đã khởi động lại máy chủ của tôi mà tôi không biết, nó sẽ tạo ra một. Cuối cùng. nếu nhiều phiên tồn tại, nó sử dụng cái đầu tiên.

Nhiều kudos để https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-inemony cho mẹo này một lúc trước.

BIÊN TẬP:

Ngoài ra đây là một vài lời giải thích hữu ích man screenvề các thông số mật mã

       -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.

có nhiều hơn với -Dvì vậy hãy chắc chắn kiểm traman screen


2

Đầu ra của screen -listđược định dạng như thế nào pid.tty.host. Các pids có thể được sử dụng để có được quá trình con đầu tiên với pstree:

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

Bạn sẽ nhận được một danh sách như thế này

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

1
screen -d -r 4964

hoặc là

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.