Как прекратить сеанс 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.


5
но 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.


0

(отказ от ответственности: я начинающий) Этот скрипт завершает все панели / окна 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.