Cara mengakhiri sesi tmux dan memprosesnya


13

Saya perhatikan bahwa saya memiliki proses yang berjalan dan saya pikir itu karena saya menginisialisasi proses dalam byobu yang menggunakan tmux.

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

Saya memiliki sesi tmux yang disebut "3". Seperti yang Anda lihat di bawah:

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

Saya ingin keluar dari sesi itu dan mengakhiri semua proses yang berjalan yang dibuat oleh sesi itu.


Bisakah Anda menempelkan output 'ps -ef | grep byobu 'dan' ps -ef | terima tmux '?
Dustin Kirkland

Jawaban:


15
tmux kill-session [-t session_name]

proses di terminal virtual harus menerima SIGHUP.


5
tetapi SIGHUP tidak mematikan proses. biasanya respanws mereka.
Andrea Pavoni

1
Tergantung pada proses apa yang Anda bicarakan. Beberapa daemon memang menggunakan SIGHUP sebagai sinyal untuk menginisialisasi ulang (baca kembali file konfigurasi, dll.), Tetapi ini biasanya bercabang dari grup proses dan terminal pengendali dan harus dianggap independen sejak saat itu. Aplikasi interaktif biasanya berhenti karena tidak menangani sinyal atau karena kehilangan terminal agak bertentangan dengan interaktif.
peterph

6

Ini juga mengganggu saya, jadi saya menulis plugin tmux untuk ini. Itu tidak sempurna, tetapi dapat dengan mudah diperluas untuk mengetahui cara mematikan sebagian besar proses sebelum keluar dari tmux: tmux-safekill


4

Mungkin itu bukan solusi yang paling elegan, tetapi lakukan apa yang Anda minta:

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

Jika Anda menjalankan ini dari dalam tmux-sesi Anda, itu akan membunuh semua proses itu melahirkan, dan Anda kemudian dapat berhenti tmux dengan exit.


0

(penafian: saya pemula) Skrip ini mengakhiri semua panel / jendela masuk some_sessiondan keluar:

#!/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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.