วิธีการยุติเซสชั่น 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 ไม่ได้ฆ่ากระบวนการ มันมักจะตอบสนองพวกเขา
Andrea Pavoni

1
ขึ้นอยู่กับว่าคุณกำลังพูดถึงกระบวนการอะไร daemons บางตัวใช้ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.