Tmux'taki “bölmenin ilk yardımcısı” ne anlama geliyor?


5

Tmux manpage'in okurlar için mevcut değişkenler listesindeki giriş pane_pidaşağıdaki gibidir:

pane_pid PID of first process in pane

Ancak, Çalışan veya çalışan bir tmux oturumundaki bir tmux bölmesine bir komut gönder veya gönder komutu uyarınca , "tmux, ilk komutu ile başlatıldığında bir bölmeye fazladan işlem eklemek için bir yol sağlamaz."

Öyleyse ... bölmenin ilk işleminin PID'sini döndürmek ne anlama geliyor ? Bunun bölmenin tek ve tek PID olduğunu varsaymak mantıklı mıdır , yoksa bir bölmenin birden fazla ilişkili PID'ye sahip olmasının bir yolu var mı?


display-message "#{pane_id}"Durum çubuğuna yazıp bu paraziti incelersem bilmeliyim, hayır?
Nemo

Yanıtlar:


3

Tarafından döndürülen PID pane_pid, genellikle pencere (ya da hiçbir komut belirtilmediğinde açılan kabuk) açılırken belirtilen komutun PID değeridir.

Ancak , top; bash -itmux gibi komutları belirtirken komutun önekini bash -c(örneğin, bölmeyi oluştururken yürütülen gerçek komutun) olduğuna dikkat etmek önemlidir bash -c top; bash -i. Bu durumda, PID bunun ise sürecin , değil ait .bash -ctop

Bir anlamda, o zaman, bir bölmenin "ilk işlemi", bir bölmenin tek ve tek işlemidir, ancak doğrudan belirtilen komutla doğrudan ilişkili olan işlem değildir.


1

1) Bu cevaptan

Bölünmeyen pencerelerde tek bir bölme bulunur

Yeni bir tmux oturumu başlatırsanız:

$ tmux

Bir kabuk göreceksiniz, pane_pid = o kabuğun pid'i

Eğer kabuk içinde htop yardımcı programını çalıştırırsanız

$ htop

pane_pid de bu kabuk pid'i olacak (ilk işlem)

Eğer yeni pencerede Htop çalıştırırsanız

Press (Prefix :)
: new-window 'htop'

pane_pid = htop'un pid'i, eğer htop'u bırakırsanız, bölme de kapanacaktır ancak respawn komutunu kullanırsanız:

Press (Prefix :)  # for single pane window
: respawn-window -t session_name:window_index -k 'bash'
Or                # for multi-pane window  
: respawn-pane -t session_name:window_index.pane_index -k 'bash'

o zaman pane_pid yeni işlemin pid'i olacak (bu durumda bash)


2) Yani her bölmede bir pane_pid var ve bu pane_pid sadece respawn kullanılarak değiştirilebilir



1

Teknik olarak bölmenin teknik olarak bir PID'si olduğunu söyleyebileceğinizi sanmıyorum. Bölmedeki işlem bir PID'ye sahiptir. Bölme, sözde bir terminal görevi görür. Örneğin üstte bir bölmeyle bölmeye başlayabilirsiniz. Kapatıncaya kadar çalışır ve sonra bölme kapanır (varsayılan olarak, bu davranışın değişip değişmediğini bilmiyorum). En üstteki örnek çalışırken ilişkilendirilmiş bir PID'ye sahip olacaktır.

Düzenleme: Yeni bir işe başlarken, (örnek: split-window -h "top" ) tmux yeni bölmede üste çıkar ve üstteki süreç pane_pid'dir. Yeni bir bölmede birden fazla iş başlatırken (örneğin, split-window -h "top; tail -F / var / log / maillog" gibi bir şey), tmux iş kontrolü için etkileşimli olmayan bir kabuk ortaya koyuyor gibi görünüyor. Bu kabuk görünüşte ilk işlemden ziyade pane_pid alır (ikinci örnekte "üst").

Görünüşe göre bölme sadece bölmede başlayan ilk işlem çalıştığı sürece açık kalır (en azından teoride içerideki süreç bölmenin bir zombi süreci olarak kapanmasına dayanabilir). Bu süreç elbette yeni süreçler doğurabilir. Bu yüzden sanırım, bir bölmede, öldürüldüğünde bölmenin kapanmasına neden olacak "sihirli bir işlem" olduğunu söyleyebilirsin, ancak bölmenin kendisinin teknik olarak hala bir PID'si yoktur. Bu mantıklı, çünkü sözde terminale giden başka giriş veya çıkış yok.

BTW, bunların hepsi normal Linux terminal davranışına benziyor. Terminalinize ilk giriş yaptığınızda, giriş işlemi tarafından oluşturulan bir bash (veya kullanıcı dosyanızda belirlediğiniz diğer bir kabuk) işlemi elde edersiniz. Aynı anda tty1 ve tty2'ye giriş yaparsanız, her biri için bir kabuk elde edersiniz. Run ps -u ve kabuk süreci koşu ve hangi terminali bunun üzerine (tty1, tty2 vs.) çalıştıran görebilirsiniz. Eğer kabuk işlemini tty2'de öldürürseniz, tty2'den çıkmış olursunuz. Ancak tty2 açık kalıyor, çünkü işletim sistemi bunu açık tutmak için bir getty üretti.


Bu cevabı aştım çünkü bu en mantıklı gibi görünüyor; Bununla birlikte, daha fazla inceleme yapıldığında, bu aslında doğru değildir. Görünüşe göre, bir bölmenin tam anlamıyla bir PID'si var. Bunun nedeni ALL komutlarının (söyleyebileceğim kadarıyla) tmux tarafından "bash -c" ile eklenmiş olmasıdır. pane_pidbu bash işleminin PID değerini döndürür.
rintaun

Gördüğüm davranış bu değil. Split-window -h "top" gibi yeni bir bölme ortaya çıkardıysam, ana süreç tmux ve hiçbir bash üretilmez. Bu ps -auxf'te
Bolwerk

Oh, işte başlıyoruz: iki süreç ortaya koyuyor (örneğin, split-window -h "top; ftp" ) ve sonra bir bash -c doğuyor. Sanırım bu, tmux’un çok işlemli komutları yönetme şekli. Ama aslında cevabımı değiştirmiyor: bash-c hala bölme değil. Bölme, sizin tmux örneğinizdedir ve bash -c, bölme ile etkileşime giren bir işlemdir. Bunu yansıtmak için cevabımı düzenleyeceğim.
Bolwerk

bash -cBölme olmadığı ayrımını yapmak gerçekten anlamlı mı ? Bölme, yalnızca bu işlem çalışırken var, bu yüzden aslında benim için eş anlamlı gibi görünüyor.
rintaun

Bölme, girdi alabilen ve çıktı alabilen sözde bir terminal sağlar. Bu sözde-terminal muhtemelen en iyi şekilde bir dosya olarak tanımlanabilir (en azından Linux / dev / pts / bu sözde-terminallerin listesini içerir). Açıkça söylemek gerekirse, işlemin bölmeyle ve sözde terminal ile ilişkili olduğu söylenebilir, ancak işlemin pid'si bölmeye ait değildir, çünkü bölme bir işlem değil, tmux işleminin bir parçasıdır. Sanırım bölmenin söylenebileceği şey okumak ve yazmak için sahte bir terminal açmak. Bunun sizin için pratik bir etkisi olup olmadığı söyleyemem. :-p
Bolwerk
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.