Cómo terminar la sesión tmux y procesarla engendrada

13

Noté que tengo un proceso en ejecución y creo que es porque inicialicé el proceso en byobu que está usando tmux.

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

Tengo una sesión tmux llamada "3". Como puede ver abajo:

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

Me gustaría salir de esa sesión y finalizar todos los procesos en ejecución creados por esa sesión.

JohnMerlino
fuente
¿Puedes pegar la salida de 'ps -ef | grep byobu 'y' ps -ef | grep tmux '?
Dustin Kirkland

Respuestas:

15
tmux kill-session [-t session_name]

Los procesos en los terminales virtuales deben recibir SIGHUP.

Peterph
fuente
55
pero SIGHUP no mata los procesos. por lo general los reaparece .
Andrea Pavoni
1
Depende de qué procesos estés hablando. De hecho, algunos demonios usan SIGHUP como una señal para reinicializar (releer los archivos de configuración, etc.), pero estos generalmente se separan del grupo de procesos y del terminal de control y deben considerarse independientes a partir de ese momento. Las aplicaciones interactivas generalmente se cierran ya sea por no manejar la señal o porque perder el tipo de terminal va en contra de ser interactivo.
Peter
6

Esto también me estaba molestando, así que escribí un complemento tmux para esto. No es perfecto, pero se puede ampliar fácilmente para saber cómo matar de forma segura la mayoría de los procesos antes de salir de tmux: tmux-safekill

Jonathan Lipps
fuente
4

Tal vez no sea la solución más elegante, pero hace lo que pediste:

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

Si ejecuta esto desde su sesión tmux, matará todos los procesos que generó, y luego puede salir de tmux con exit.

Andrea Schiavini
fuente
0

(descargo de responsabilidad: soy principiante) Este script finaliza todos los paneles / ventanas some_sessiony sale:

#!/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
fuente