Как завершить tmux сессию и процессы, она метала икру

Это должно быть возможно, говоря удару выписать и перечитать историю после каждой команды. Непротестированный:

PROMPT_COMMAND="$PROMPT_COMMAND"$'\nhistory -a; history -n'

Совместное использование истории является поведением по умолчанию ksh. В zsh Вы получаете это поведение путем включения share_history опция, и можно получить намного более прекрасный контроль над тем, как история сохраняется и объединяется путем тонкой настройки других опций истории.

13
29.08.2013, 18:36
4 ответа
tmux kill-session [-t session_name]

процессы в виртуальных терминалах должны получить SIGHUP.

15
27.01.2020, 19:52
  • 1
    , но SIGHUP не уничтожает процессы. это обычно respanws их. –  Andrea Pavoni 04.06.2014, 15:39
  • 2
    Зависит, на каких процессах Вы говорите о. Некоторые демоны действительно используют SIGHUP в качестве сигнала повторно инициализировать (перечитайте конфигурационные файлы и т.д.), но их обычно ветвление далеко от группы процесса и терминала управления и нужно считать независимыми с тех пор. Интерактивные приложения обычно выходят или из-за не обработки сигнала или потому что потеря терминала отчасти идет вразрез с тем, чтобы быть интерактивным. –  peterph 05.06.2014, 17:34

Может быть, это не самое элегантное решение, но делает то, что вы просили:

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

Если вы запустите его из вашей tmux-сессии, он убьет все процессы, которые он породил, и вы сможете выйти из tmux с помощью exit.

4
27.01.2020, 19:52

Это тоже беспокоило меня, поэтому я написал плагин TMUX для этого. Это не идеально, но легко можно продлить, чтобы знать, как безопасно убивать самые виды процессов, прежде чем выходить из TMUX: TMUX-Safekill

6
27.01.2020, 19:52

( отказ от ответственности :я новичок )Этот скрипт закрывает все панели/окна в 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
1
27.01.2020, 19:52

Теги

Похожие вопросы