tmux 세션을 종료하고 처리하는 방법

tmux 세션을 종료하고 처리하는 방법

프로세스가 실행 중이라는 것을 알았는데, tmux를 사용하여 byobu에서 프로세스를 초기화했기 때문이라고 생각했습니다.

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

"3"이라는 tmux 세션이 있습니다. 다음과 같이:

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

세션을 종료하고 해당 세션에서 생성된 실행 중인 모든 프로세스를 종료하고 싶습니다.

답변1

tmux kill-session [-t session_name]

가상 터미널의 프로세스는 SIGHUP을 수신해야 합니다.

답변2

이것도 귀찮아서 이에 대한 tmux 플러그인을 작성했습니다. 완벽하지는 않지만 tmux를 종료하기 전에 대부분의 프로세스 유형을 안전하게 종료하는 방법을 확인하기 위해 쉽게 확장할 수 있습니다.tmux-safekill

답변3

아마도 이것은 가장 우아한 솔루션은 아니지만 원하는 작업을 수행합니다.

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

tmux-session 내에서 이 명령을 실행하면 생성된 모든 프로세스가 종료되고 를 사용하여 tmux를 종료할 수 있습니다 exit.

답변4

(면책 조항: 저는 초보자입니다.) 이 스크립트는 모든 창/창을 종료 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

관련 정보