tmux kill-session [-t session_name]
os processos nos terminais virtuais devem receber SIGHUP.
Percebi que tenho um processo em execução e acho que é porque 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 do 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 que foram criados por essa sessão.
Isso também estava me incomodando, 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
Talvez não seja a solução mais elegante, mas faz 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 isto dentro de sua sessão tmux, ele irá matar todos os processos que ele gerou, e você pode então sair do tmux com exit
.
(disclaimer: i am beginner) Este script encerra todos os painéis / janelas em some_session
e 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