プロセスが実行中であることがわかりましたが、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