Como encerrar a sessão do tmux e os processos que ela gerou

13

Percebi que tenho um processo em execução e acho que é porque eu inicializei o processo no byobu que está usando o tmux.

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

Eu tenho uma sessão tmux chamada "3". Como você pode ver abaixo:

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

Gostaria de sair dessa sessão e encerrar todos os processos em execução criados por essa sessão.

JohnMerlino
fonte
Você pode colar a saída de 'ps -ef | grep byobu 'e' ps -ef | grep tmux '?
Dustin Kirkland

Respostas:

15
tmux kill-session [-t session_name]

os processos nos terminais virtuais devem receber SIGHUP.

peterph
fonte
5
mas o SIGHUP não mata processos. geralmente os revolve .
Andrea Pavoni
1
Depende de quais processos você está falando. Alguns daemons de fato usam o SIGHUP como um sinal para reinicializar (reler os arquivos de configuração etc.), mas geralmente se separam do grupo de processos e do terminal de controle e precisam ser considerados independentes a partir de então. Os aplicativos interativos geralmente são encerrados por não manipular o sinal ou porque perder o tipo de terminal vai contra a interatividade.
Peterph
6

Isso estava me incomodando também, então eu escrevi um plugin tmux para isso. Não é perfeito, mas pode ser facilmente estendido para saber como matar com segurança a maioria dos processos antes de sair do tmux: tmux-safekill

Jonathan Lipps
fonte
4

Talvez não seja a solução mais elegante, mas faça o que você pediu:

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

Se você executar isso a partir da sua sessão tmux, ele matará todos os processos que gerou e poderá sair do tmux exit.

Andrea Schiavini
fonte
0

(aviso: sou iniciante) Este script finaliza todos os painéis / janelas some_sessione sai:

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