So beenden Sie die TMUX-Sitzung und verarbeiten sie

13

Mir ist aufgefallen, dass ich einen laufenden Prozess habe und ich denke, das liegt daran, dass ich den Prozess in byobu initialisiert habe, das tmux verwendet.

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

Ich habe eine tmux-Sitzung mit dem Namen "3". Wie Sie unten sehen können:

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

Ich möchte diese Sitzung beenden und alle laufenden Prozesse beenden, die von dieser Sitzung erstellt wurden.

JohnMerlino
quelle
Können Sie die Ausgabe von 'ps -ef | grep byobu 'und' ps -ef | grep tmux '?
Dustin Kirkland

Antworten:

15
tmux kill-session [-t session_name]

Die Prozesse in den virtuellen Terminals sollten SIGHUP erhalten.

peterph
quelle
5
aber SIGHUP bricht keine Prozesse ab. es respanws sie normalerweise .
Andrea Pavoni
1
Kommt darauf an, von welchen Prozessen du sprichst. Einige Daemons verwenden SIGHUP zwar als Signal für die Neuinitialisierung (erneutes Lesen der Konfigurationsdateien usw.), diese entfernen sich jedoch normalerweise von der Prozessgruppe und dem steuernden Terminal und müssen von da an als unabhängig betrachtet werden. Interaktive Anwendungen werden normalerweise beendet, weil das Signal nicht verarbeitet wird oder weil der Verlust des Terminals der Interaktivität entgegensteht.
Peterph
6

Das hat mich auch gestört, deshalb habe ich ein tmux-Plugin dafür geschrieben. Es ist nicht perfekt, kann aber leicht erweitert werden, um zu wissen, wie man die meisten Arten von Prozessen sicher beendet, bevor man tmux beendet: tmux-safekill

Jonathan Lipps
quelle
4

Vielleicht ist es nicht die eleganteste Lösung, aber es macht das, wonach Sie gefragt haben:

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

Wenn Sie dies in Ihrer tmux-Sitzung ausführen, werden alle Prozesse abgebrochen, die dadurch ausgelöst wurden, und Sie können tmux mit beenden exit.

Andrea Schiavini
quelle
0

(Haftungsausschluss: Ich bin Anfänger) Dieses Skript beendet alle Bereiche / Fenster in some_sessionund beendet:

#!/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
qrtLs
quelle