Làm thế nào để chấm dứt phiên tmux và xử lý nó sinh ra


13

Tôi nhận thấy rằng tôi có một quy trình đang chạy và tôi nghĩ đó là vì tôi đã khởi tạo quy trình trong byobu đang sử dụng tmux.

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

Tôi có một phiên tmux gọi là "3". Như bạn có thể thấy dưới đây:

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

Tôi muốn thoát phiên đó và kết thúc tất cả các quy trình đang chạy được tạo bởi phiên đó.


Bạn có thể dán đầu ra của 'ps -ef | grep byobu 'và' ps -ef | grep tmux '?
Dustin Kirkland

Câu trả lời:


15
tmux kill-session [-t session_name]

các quy trình trong các thiết bị đầu cuối ảo sẽ nhận được SIGHUP.


5
nhưng SIGHUP không giết các tiến trình. nó thường trả lời họ.
Andrea Pavoni

1
Phụ thuộc vào quá trình bạn đang nói về. Một số trình tiện thực sự sử dụng SIGHUP làm tín hiệu để xác định lại (đọc lại các tệp cấu hình, v.v.), nhưng chúng thường tách khỏi nhóm quy trình và thiết bị đầu cuối kiểm soát và phải được xem xét độc lập từ đó trở đi. Các ứng dụng tương tác thường thoát hoặc do không xử lý tín hiệu hoặc vì mất loại thiết bị đầu cuối đi ngược lại với việc tương tác.
peterph

6

Điều này cũng làm phiền tôi, vì vậy tôi đã viết một plugin tmux cho việc này. Nó không hoàn hảo, nhưng có thể dễ dàng được mở rộng để biết cách tiêu diệt an toàn hầu hết các loại quy trình trước khi thoát khỏi tmux: tmux-safekill


4

Có thể đó không phải là giải pháp tao nhã nhất, nhưng thực hiện những gì bạn yêu cầu:

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

Nếu bạn chạy nó từ trong phiên tmux của bạn, nó sẽ giết tất cả các quy trình mà nó sinh ra và sau đó bạn có thể thoát khỏi tmux exit.


0

(từ chối trách nhiệm: tôi là người mới bắt đầu) Kịch bản này chấm dứt tất cả các cửa sổ / cửa sổ vào some_sessionvà thoát:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.