Mevcut bir ekran oturumuna tekrar tarama


81

Ekranın altında çalışan bir programım var. Aslında, oturumdan ayrılıp netstat'ı kontrol ettiğimde, programın hala çalıştığını görebiliyorum (istediğim bu):

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

Şimdi bu işlemi çalıştıran oturuma tekrar bağlanmak istiyorum. Bu yüzden yeni bir terminal başlattım ve screen -r yazın.

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

Ama oluşturduğum bu süreci çalıştıran oturumun hangisi olduğunu nasıl bilebilirim?

Şimdi karşılaştığım belgelerden biri şöyle dedi:

"Bir pencere kullanırken, ona bir ad vermek için Ca A yazın. Bu ad, pencere listesinde kullanılacak ve çok sayıda pencere kullanmaya başladığınızda her pencerede ne yaptığınızı hatırlamanıza yardımcı olacaktır. "

Mesele şu ki, yeni bir seansta olduğumda control + a'ya basmaya çalışıyorum ve hiçbir şey olmuyor.


Birden fazla açık ekran listesinden birini seçmenin hızlı bir yolunu , screen -rardından bu ekranlar listesinde 1, 2, 3 ... sayısını takip edin .
user18099

Yanıtlar:


91

Buraya dahil olan iki "liste" seviyesi vardır. Birincisi, ctrl-A A'nın ne için olduğu tek bir oturumda “pencere listesi” ve ikincisi de sorunuza ne yapıştırdığınız ve ne ile görüntülenebilecekleri bir “oturum listesi” var screen -ls.

Oturum adlarını -Sparametreyle özelleştirebilirsiniz , aksi takdirde ana bilgisayar adınızı kullanır (örneğin, takım çalışması):

$ screen

(ctrl-Ad ayırmak için)

$ screen -S myprogramrunningunderscreen

(ctrl-Ad ayırmak için)

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

Bonus olarak, -Sdaha sonra tekrar bağlanmak için geçtiğiniz adın kesin bir kısaltmasını kullanabilirsiniz :

screen -r myprog

(Ben myprogramrunningunderscreenoturuma yeniden bağlıyım)


Bu ctrl + aa senin için çalışıyor mu? Aynı anda control + a tuşlarına basın ve ardından hızlıca tekrar a tuşuna basın ve hiçbir şey olmuyor.
JohnMerlino

Evet; ctrl-A ave arasında bir fark var ctrl-A shift-A. İkincisi beni istedi Set window's title to:. İkinci A için shift tuşuna bastığınızdan emin olun.
Paul

Yaparım: "screen -r 21tweet" ve cevap olarak: "Bir ekran var: 3239.21tweet (08/21/2015 09:14:35 AM) (Eklendi) 21tweet ile eşleşen devam edecek bir ekran yok." Bu ne olabilir?
Michael

Ekran oturumlarını isimlendiren çok belirgin olmayan bir uyarı, eğer onları isimlendirirseniz -S, en azından otomatik olarak tanımlanmadan farklı olarak ekran oturumunun tam adındaki ID numarasını ve noktayı takip eden ismin net bir kısaltmasını kullanmanız gerekir. oluşturulan oturum isimleri, burada kimliği ve noktayı dahil edebilirsiniz.
Spencer Williams

1
Yazım hatası, düzeltildi. Ve bu site ek bir metin olmadan kısa bir yorum yapmama izin vermiyor.
Paul

37

screen -rYeniden bağlanamayan bir durum vardı . -dBayrağı bu şekilde görünecek şekilde eklemek

screen -d -r

benim için çalıştı. Önceki ekranı ayırdı ve yeniden takmama izin verdi. Daha fazla bilgi için Man Sayfasına bakın.


12

Kolay bir yöntem, isteğe bağlı bir ekrana kolayca yeniden bağlanmaktır.

screen -r

Ardından ekranı çalıştırdığınızda, tuşuna basarak tüm etkin ekranların bir listesini alabilirsiniz Ctrl-A "(örn. Kontrol-A ve ardından çift alıntı). O zaman aktif ekranları birer birer seçebilir ve neyin çalıştığını görebilirsiniz. Ekranları adlandırmak elbette doğru olanı tanımlamayı kolaylaştıracaktır.

Sadece iki sentim


okie ekranımı nasıl adlandırabilirim?
austin

@ austin ekran -S <oturum adı>
Brian

4

Birkaç kümede birkaç makinede çalışmam gereken aşağıdaki combo'yu kullanıyorum:

screen -S clusterX

Bu, ortamı oluşturabileceğim yeni ekran oturumunu yaratıyor.

screen -dRR clusterX

Daha sonra o ekran oturumuna tekrar bağlamak için kullandığım şey bu. Şık bit, eğer oturum başka bir yere takılırsa, o diğer ekranı ayırır. Dahası, ilginç bir nedenden ötürü bir oturum yoksa, birisi benden habersiz sunucumu yeniden başlattığında, bir tane oluşturur. En sonunda. Birden fazla oturum varsa, ilkini kullanır.

Much şeref https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions bir süre önce bu ipucu için.

DÜZENLE:

Ayrıca burada man screenşifreli parametrelerle ilgili birkaç yararlı açıklama bulunmaktadır .

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

dahası var, -Dkontrol ettiğinizden emin olunman screen


2

Çıkışı screen -listgibi biçimlendirilmiş pid.tty.host. Pids ilk çocuk sürecini yapmak için kullanılabilir pstree:

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

Bunun gibi bir liste alacaksınız

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

1
screen -d -r 4964

veya

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