Як припинити сеанс tmux та породжувати його процеси


13

Я помітив, що у мене запущений процес, і я думаю, що це тому, що я ініціалізував процес у byobu, який використовує tmux.

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

У мене сесія tmux під назвою "3". Як видно нижче:

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

Я хотів би вийти з цього сеансу і закінчити всі запущені процеси, створені цим сеансом.


Чи можете ви вставити висновок 'ps -ef | grep byobu 'і' ps -ef | grep tmux '?
Дастін Кіркленд

Відповіді:


15
tmux kill-session [-t session_name]

процеси у віртуальних терміналах повинні отримувати SIGHUP.


6
але SIGHUP не вбиває процеси. Зазвичай вони відновлюють їх.
Андреа Павоні

1
Залежить від того, про які процеси ви говорите. Деякі демони дійсно використовують SIGHUP як сигнал для повторної ініціалізації (перечитування файлів конфігурації тощо), але вони, як правило, відходять від групи процесів та керуючого терміналу і з цього моменту повинні вважатися незалежними. Інтерактивні програми зазвичай виходять або з-за того, що не обробляють сигнал, або через те, що втрата термінального типу йде проти інтерактивності.
петерф

6

Це мене також турбувало, тому я написав для цього плагін tmux. Це не ідеально, але його можна легко розширити, щоб знати, як безпечно вбивати більшість видів процесів до виходу з tmux: tmux-safekill


4

Можливо, це не найелегантніше рішення, але робить те, про що ви просили:

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

Якщо запустити це протягом свого tmux-сеансу, він знищить усі процеси, які він породив, і ви можете вийти з tmux за допомогою exit.


1

(відмова від відповідальності: я початківець) Цей скрипт припиняє всі панелі / вікна в some_sessionі закінчується:

#!/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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.