Screen
kiểm tra fifo / socket bất cứ khi nào nó nhận được SIGCHLD
tín hiệu. Nếu ổ cắm bị thiếu, nó sẽ được tạo lại. Vì vậy, giải pháp là tìm quá trình và gửi nó SIGCHLD
.
Trên hệ thống Debian của tôi, screen
dường như được cài đặt là setgid utmp
nhưng không phải setuid, vì vậy giải pháp đầu tiên từ FAQ dưới đây đã hoạt động:
$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost
Trên các hệ thống có cài đặt màn hình setuid root
, điều này sẽ không hoạt động và bạn sẽ cần phải giết một trong các tiến trình con của phiên màn hình hoạt động để buộc kernel gửi tín hiệu cho bạn. Điều này có nghĩa là hy sinh một trong các cửa sổ màn hình của bạn để kết nối lại với phần còn lại (chọn một cách khôn ngoan!).
Từ một Câu hỏi thường gặp về Gentoo Wiki :
Thiếu ổ cắm
Đôi khi ổ cắm của màn hình vẫn đang chạy có thể bị phá hủy, mặc dù quy trình thực tế và tất cả các quy trình con của nó vẫn đang chạy. danh sách màn hình sẽ hiển thị "Không tìm thấy ổ cắm trong / tmp / usc Greens / .." Một số hướng dẫn hữu ích về cách phục hồi từ điều này (và một vài vấn đề không phổ biến khác) tại http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC
khoảng 2/3 đường xuống.
H: Vì một số lý do không xác định, fifo in / tmp / Screens / S-myname đã biến mất và tôi không thể tiếp tục phiên màn hình của mình. Có cách nào để tạo lại fifo?
A: Màn hình kiểm tra fifo / socket bất cứ khi nào nó nhận được tín hiệu SIGCHLD. Nếu thiếu, fifo / socket được tạo lại sau đó.
Nếu màn hình đang chạy không được thiết lập, người dùng có thể phát hành
kill -CHLD screenpid
trực tiếp (nó nằm -CHILD
trên một số hệ thống). Screenpid là id tiến trình của quá trình màn hình được tìm thấy trong ps -x
danh sách.
Nhưng thường thì điều này sẽ không hoạt động, vì màn hình nên được cài đặt root setuid. Trong trường hợp này, bạn sẽ không thể gửi tín hiệu, nhưng kernel sẽ. Nó làm như vậy, bất cứ khi nào một đứa trẻ của màn hình thay đổi trạng thái của nó. Tìm id tiến trình (shellpid bên dưới) của shell "ít quan trọng nhất" đang chạy bên trong màn hình. Sự cố gắng kill -STOP shellpid
. Nếu fifo / socket không xuất hiện lại, phá hủy tiến trình shell. Bạn hy sinh một cái vỏ để cứu những người còn lại. Nếu không có gì hoạt động, xin đừng quên xóa tất cả các quy trình đang chạy trong phiên màn hình bị mất.