Tmux oturumunu ve ortaya çıkardığı işlemleri sonlandırma


13

Ben çalışan bir süreç olduğunu fark ettim ve ben çünkü tmux kullanan byobu süreci başlattı çünkü.

ps aux | grep sidekiq
1000     13786  0.0  0.0   8108   900 pts/4    S+   11:27   0:00 grep sidekiq

"3" adında bir tmux oturumu var. Aşağıda görebileceğiniz gibi:

$ byobu   

Byobu sessions...

  1. tmux: 3: 1 windows (created Wed Aug 28 10:57:54 2013) [229x84] (attached)
  2. tmux: daemon: 1 windows (created Thu Jul 11 12:59:09 2013) [127x83]
  3. tmux: juggernaut: 1 windows (created Thu Jul 11 12:54:08 2013) [80x23]

Bu oturumdan çıkmak ve o oturum tarafından oluşturulan tüm çalışan işlemleri sonlandırmak istiyorum.


'Ps -ef çıktısını yapıştırabilir misiniz? grep byobu 've' ps -ef | grep tmux '?
Dustin Kirkland

Yanıtlar:


15
tmux kill-session [-t session_name]

sanal terminallerdeki işlemler SIGHUP almalıdır.


6
ancak SIGHUP süreçleri öldürmez. genellikle onları yeniden başlatır .
Andrea Pavoni

1
Hangi işlemlerden bahsettiğinize bağlıdır. Bazı artalan süreçleri SIGHUP'u yeniden başlatmak (yapılandırma dosyalarını yeniden okumak vb.) İçin bir sinyal olarak kullanırlar, ancak bunlar genellikle süreç grubundan ve kontrol terminalinden ayrılır ve bundan sonra bağımsız olarak düşünülmeleri gerekir. Etkileşimli uygulamalar genellikle ya sinyalin tutulmaması ya da uçbirim türünün kaybedilmesinin etkileşime girmemesi nedeniyle kapanır.
peterph

6

Bu da beni rahatsız ediyordu, bu yüzden bunun için bir tmux eklentisi yazdım. Mükemmel değil, ancak tmux'dan çıkmadan önce birçok işlemin güvenli bir şekilde nasıl öldürüleceğini bilmek için kolayca genişletilebilir: tmux-safekill


4

Belki de en zarif çözüm değil, ama ne istersen yapar:

tmux list-panes -s -F "#{pane_pid} #{pane_current_command}" | grep -v tmux | awk '{print $1}' | xargs kill -9

Bunu tmux oturumunuzdan çalıştırırsanız, ortaya çıktığı tüm işlemleri öldürür ve tmux'dan çıkabilirsiniz exit.


1

(yasal uyarı: ben acemi) Bu komut dosyası tüm bölmeleri / pencereleri sonlandırır some_sessionve çıkar:

#!/usr/bin/env bash

session="some_name"

echo about to kill ${session}, ok?
read -n 1 -s -r -p "Press key..."
echo 

sessiontest=`tmux ls | grep ${session}`

if [ "${sessiontest}" == "" ]; 
then
        echo no running session ${session}
else        
        for name in `tmux list-windows -F '#{window_name}' -t ${session}` ; do 

        tmux select-window -n

        for pane in `tmux list-panes -F '#{pane_id}' -t ${session}` ; do 
        tmux send-keys -t $pane C-c
        # send SIGINT to all panes in selected window
        echo ${session}:$name.${pane//%}
        done

        for pane in `tmux list-panes -F '#{pane_pid}' -t ${session}` ; do 
        kill -TERM ${pane}
        # terminate pane
        done

        done 
fi

echo list-sessions:
tmux list-sessions
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.