Comment mettre fin à la session tmux et les processus qu'elle a engendrés


13

J'ai remarqué que j'ai un processus en cours et je pense que c'est parce que j'ai initialisé le processus dans byobu qui utilise tmux.

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

J'ai une session tmux appelée "3". Comme vous pouvez le voir ci-dessous:

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

Je voudrais quitter cette session et terminer tous les processus en cours d'exécution créés par cette session.


Pouvez-vous coller la sortie de 'ps -ef | grep byobu 'et' ps -ef | grep tmux '?
Dustin Kirkland

Réponses:


15
tmux kill-session [-t session_name]

les processus dans les terminaux virtuels devraient recevoir SIGHUP.


5
mais SIGHUP ne tue pas les processus. il leur répond généralement .
Andrea Pavoni

1
Cela dépend de quels processus vous parlez. Certains démons utilisent en effet SIGHUP comme signal pour réinitialiser (relire les fichiers de configuration, etc.), mais ceux-ci s'éloignent généralement du groupe de processus et du terminal de contrôle et doivent être considérés comme indépendants à partir de là. Les applications interactives s'arrêtent généralement soit parce qu'elles ne gèrent pas le signal, soit parce que perdre le type de terminal va à l'encontre de l'interactivité.
peterph

6

Cela me dérangeait également, alors j'ai écrit un plugin tmux pour cela. Ce n'est pas parfait, mais peut facilement être étendu pour savoir comment tuer en toute sécurité la plupart des types de processus avant de quitter tmux: tmux-safekill


4

Ce n'est peut-être pas la solution la plus élégante, mais fait ce que vous avez demandé:

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

Si vous l'exécutez à partir de votre session tmux, il tuera tous les processus qu'il a engendrés, et vous pouvez ensuite quitter tmux avec exit.


0

(Avertissement: je suis débutant) Ce script met fin à tous les volets / fenêtres some_sessionet se ferme:

#!/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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.