Màn hình GNU - Không thể gắn lại màn hình sau khi mất kết nối


23

Tôi đã sử dụng irssi trong màn hình nhưng bị mất kết nối. Sau khi tôi quay lại máy chủ, tôi không thể gắn vào màn hình đó nữa. màn hình -ls cho thấy màn hình đã được đính kèm.

Tôi đã thử màn hình -D để buộc tách nó ra và nó nói tách ra nhưng màn hình vẫn nói nó được đính kèm. Tôi đã thử màn hình -x và nó chỉ bị treo ở đó.

[sub@server ~]$ screen -ls 
There are screens on:
 4033.poe (Detached)
 7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.

Tôi có thể làm gì bây giờ?

Câu trả lời:


14

Nếu bạn đang cố gắng kết nối màn hình 'Đã đính kèm', hãy chạy screen -xr irssi. Chữ hoa '-X' gửi lệnh đến một trong các phiên trên màn hình, tùy chọn '-x' chữ thường cho phép bạn kết nối lại với phiên đính kèm. Nhưng bạn vẫn cần cung cấp tên phiên vì có nhiều hơn một.


9

Tôi đã xóa hành vi này trong quá khứ bằng cách giết cái vỏ bắt đầu phiên màn hình. Về cơ bản, tiêu diệt tất cả các trường hợp bash cho người dùng của tôi không thuộc sở hữu của màn hình.


2
Đã thử tất cả các tùy chọn (-RD, -xr) được đề cập ở đây và không thể phục hồi phiên. Đã kết thúc việc giết phiên SCREEN bằng cách tìm (ps -ef | grep bash) nó.
so_mv

4

Bạn đã đặt cho nó một cái tên không mặc định. Thử đi:screen -RD irssi


2
Tôi có một vấn đề tương tự, nhưng màn hình -RD <name> vẫn bị treo ... :-(
harald

4

bạn co thể thử:

#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi  

#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi

luôn luôn là một ý tưởng tốt sử dụng tên đầy đủ pid.tty


3

screenđược biết là không tương thích ngược giữa các phiên bản. Nếu phiên bản screenđã được cập nhật trên máy chủ, có thể bạn không thể gắn lại các phiên màn hình cũ hơn nữa.

Trong trường hợp đó, bạn có thể sử dụng nhị phân SCREEN cũ để gắn lại (với điều kiện trình quản lý gói phân phối của bạn đã lưu nó ở đâu đó) hoặc hủy phiên hoàn toàn.


2

Tôi đã có một số thành công bằng cách gửi GNU / màn hình xử lý SIGCHLD (mà nó thường nhận được khi đóng cửa sổ), điều này buộc nó phải chạm (và có thể tạo lại) tệp socket.

Cũng lưu ý rằng có hai cách để gọi screentệp thực thi chỉ khác nhau trong trường hợp: SCREENlà thành phần phía máy chủ mà bạn đang cố kết nối lại, trong khi đó screenlà phía máy khách xáo trộn dữ liệu giữa thiết bị đầu cuối của bạn và phía máy chủ. Vì vậy, bạn có thể muốn thử giết phiên bản chữ thường ...

Ví dụ trong những điều sau đây bạn có thể thấy rằng tôi screenSCREENcác quá trình không được coi là cha mẹ và con, chỉ ra rằng tôi đã gắn liền với một session đang tồn tại.

# ps fao pid,command
25070 SCREEN -U
25071  \_ vim +let &t_Co=256
25073  \_ -bash
25077  \_ -bash
...
18364  \_ sshd: username [priv]
18366  |   \_ sshd: username@pts/17
18367  |       \_ -bash
  870  |           \_ screen -U -x

Phiên mới trông giống như thế này:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash

Làm thế nào để gửi một SIGCHILD?
giorgio79

1
Sử dụng killlệnh có tên vô cùng như vậy: số ID tiến trình kill -s SIGCHLD <PID>ở đâu <PID>(cột ngoài cùng bên trái trong đầu ra ví dụ của tôi)
RobM

1

Điều này xảy ra với tôi khi tôi đang sử dụng vi nơi phiên bị đóng băng và tôi bị ngắt kết nối. Khi cố gắng gắn lại màn hình bằng màn hình -Arx, quá trình sẽ bị treo.

Có thể có một quá trình con tương tự đang chạy khiến màn hình bị treo. Nếu bạn nhớ lại một điều đặc biệt tập trung vào điều đó, nếu không, để có được danh sách tiến trình con đang chạy dưới màn hình của bạn, hãy làm:

ps ux -H

Điều này sẽ hiển thị các quá trình con lồng nhau:

zwood    28481  0.0  0.0 101148  8844 ?        Ss   Oct07   1:36 SCREEN -S mysession
zwood    28482  0.0  0.0  67436  1744 pts/2    Ss+  Oct07   0:00   /bin/bash
zwood    28515  0.0  0.0  67556  1876 pts/4    Ss+  Oct07   0:00   /bin/bash
zwood     4498  0.0  0.0  67436  1772 pts/5    Ss   Oct07   0:00   /bin/bash
zwood     2007  0.0  0.0  73604  1324 pts/5    S+   15:47   0:00     vi /home/zwood/.bashrc.custom
zwood    14670  0.0  0.0  67436  1768 pts/13   Ss+  Oct14   0:00   /bin/bash
zwood    27002  0.0  0.0  67436  1720 pts/11   Ss+  Oct20   0:00   /bin/bash
zwood    24748  0.0  0.0  67432  1712 pts/14   Ss+  Oct21   0:00   /bin/bash

Sau khi giết quá trình vi gây ra sự cố ngay từ đầu, tôi đã có thể gắn lại màn hình mà không gặp vấn đề gì. Giết bất kỳ quá trình trước đó đã được gắn lại vào màn hình có lẽ là một ý tưởng tốt. Chỉ dùng:

kill -9 <pid>

Tôi không biết màn hình đang làm gì trong nội bộ, tại sao vi khiến màn hình bị treo, cũng như tại sao giết quá trình vi lại đưa màn hình của tôi trở lại. Tôi đã gặp vấn đề với màn hình trong quá khứ và đã thử những gì hầu hết mọi người đang đề xuất trong chủ đề này mà không gặp may mắn. Tìm ra vấn đề này quá trình con là điều duy nhất đã làm việc cho tôi và đã làm việc nhất quán ở đó.


Một loạt các quá trình dưới màn hình là điều duy nhất đã cứu tôi. Tôi thà mất nhiều quá trình dưới màn hình, còn hơn mất toàn bộ phiên màn hình!
Yonatan


0
killall -9 sshd

Nó làm việc cho tôi. Tôi có 3 màn hình khác nhau và tôi đã mất 3 kết nối ssh khác nhau. Sau khi kết nối lại, các màn hình vẫn được gắn vào, tôi đã đưa ra lệnh ở trên ... tất nhiên tôi đã mất kết nối hiện tại, nhưng đó là một màn hình mới. Ở lần kết nối tiếp theo, mọi màn hình đều được tách ra.

Lưu ý, nếu bạn là một siêu người dùng thì bạn nên sử dụng --usertùy chọn để chỉ giết các daemon ssh của bạn.

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.