Kayıp bir ekrana nasıl bağlanabilirim (ayrılmış, eksik soket)?


23

screenBir ev sunucusunda çalışan bir oturumum vardı . İş istasyonumun yeniden başlatılması gerekiyordu, bu yüzden terminali çıkardım ve öldürdüm. Sunucuya yeniden bağlanınca tipik

$ screen -D -R
[new screen]

Ha? Hayır, yeni bir oturum değil, eskisi bana ver. Biliyorum, direkt olarak yakalayacağım. Soket adı ne?

$ screen -list
No Sockets found in /var/run/screen/S-username

$ ls -a /var/run/screen/S-username
.  ..

Bir dakika ne? Çalıştığını bıraktığımı biliyorum. Nereye gitti?

$ ps -ef | grep -i screen
username  30860     1  0 Oct16 ?        00:00:29 SCREEN

Eh, süreç var. Ancak geçilecek soket yok screen -r. Oturumu nasıl yeniden bağlayabilirim?

Yanıtlar:


28

Screenne zaman bir SIGCHLDsinyal alsa fifo / soketi kontrol eder . Soket eksikse, yeniden oluşturulur. Dolayısıyla çözüm süreci bulmak ve göndermek SIGCHLD.

Debian sistemimde screensetgid olarak kurulmuş utmpfakat setuid olarak kurulmamış gibi görünüyor , bu yüzden aşağıdaki SSS'den ilk çözüm çalıştı:

$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost

Ekranın kurulu olduğu sistemlerde root, bu işe yaramaz ve çekirdeği sizin için sinyal göndermeye zorlamak için etkin ekran oturumunun alt işlemlerinden birini öldürmeniz gerekir. Bu, geri kalanı tekrar bağlamak için ekran pencerelerinizden birini feda etmek anlamına gelir (akıllıca seçin!).

Bir itibaren arşivlenen Gentoo Wiki SSS :

Soket Eksik

Asıl işlem ve alt işlemlerin tümü hala çalışıyor olsa da, bazen çalışan bir ekranın soketi yok edilebilir. ekran-listesi "/ tmp / uscreens / .. 'te Soket bulunamadı" gösterecektir. http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC aşağı doğru yaklaşık 2 / 3'ü.

S: Bilinmeyen bir nedenden dolayı, / tmp / screens / S-myname içindeki ikilik gitti ve ekran oturumuma devam edemiyorum. Beşinci yeri yeniden yaratmanın bir yolu var mı?

C: Ekran, bir SIGCHLD sinyali aldığında beşi / soketi kontrol eder. Eğer eksikse, fifo / soket yeniden yaratılır.

Ekran ayarsız çalışıyorsa , kullanıcı kill -CHLD screenpiddoğrudan yayınlayabilir ( -CHILDbazı sistemlerde). Screenpid, bir ps -xlistede bulunan ekran işleminin işlem kimliğidir .

Fakat genellikle bu işe yaramaz, çünkü ekran setuid root kurulmalıdır. Bu durumda bir sinyal gönderemezsiniz, ancak çekirdek gönderir. Öyle yapar, ne zaman bir ekran çocuğu durumunu değiştirirse. Ekran içinde çalışan "en az önemli" kabuğun işlem kimliğini (aşağıdaki shellpid) bulun. Deneme kill -STOP shellpid. Eğer fifo / soket tekrar belirmezse, kabuk işlemini yok edin. Gerisini kurtarmak için bir kabuğunu feda edersin. Hiçbir şey işe yaramazsa, lütfen kayıp ekran oturumunda çalışan tüm işlemleri kaldırmayı unutmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.