tmux
SSHを介したセッションで以下を実行しました。
( \
( while true; do echo subsubshell1 && sleep 5; done ) & \
( while true; do echo subsubshell2 && sleep 10; done ) & \
wait; \
)
再起動せずにこの2つのバックグラウンドタスクをどのように停止できますか?上記のコマンドを実行して使用し、ウィンドウをctrl + c閉じtmux
ました。次回の再実行時に、より簡単に閉じるようにコマンドを変更する方法について提案をいただきありがとうございます。
pkill sleep
ループの次の繰り返しを開始しました。fg
仕事がないと言いました。- ctrl + cサブシェルだけを停止し、サブサブシェルとバックグラウンドコマンドは停止しないようです。
答え1
ループプロセスが呼び出され、bash
スリープはその子プロセスになります。ps
以下を使用して、睡眠プロセスの親プロセスであるbashプロセスを確認できます。
$ ps -auf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
jesse_b 255 0.0 0.0 10172 3248 pts/0 S 20:11 0:00 -bash
jesse_b 259 0.0 0.0 7232 580 pts/0 S 20:11 0:00 \_ sleep 10
jesse_b 254 0.0 0.0 10172 3248 pts/0 S 20:11 0:00 -bash
jesse_b 258 0.0 0.0 7232 520 pts/0 S 20:11 0:00 \_ sleep 5
jesse_b 13 0.0 0.0 10172 5252 pts/0 Ss 20:05 0:00 -bash
jesse_b 265 0.0 0.0 10856 3392 pts/0 R+ 20:11 0:00 \_ ps -auf
この場合、PID 254と255は終了する必要があるbashプロセスです。
または、次のようにしてPIDをエコーすることもできます。
(
( while true; do echo subsubshell1 && sleep 5; done ) &
pids+=($!)
( while true; do echo subsubshell2 && sleep 10; done ) &
pids+=($!)
echo "${pids[@]}"
wait
)