我while
在 tmux 状态栏中嵌入了一个无限循环 bash 脚本。在 ~/.tmux/conf 中:
set -g status-right '... #(path/loop.sh) ...'
Tmux 似乎使用sh -c
. tmux 启动后:
$ ps x | grep loop.sh
23433 pts/4 S+ 0:00 grep --color=auto loop.sh
31814 ? S 0:00 sh -c path/loop.sh
31818 ? S 0:00 /bin/bash path/loop.sh
tmux kill-session
终止sh -c
进程。如果我strace
它并终止会话:
$ strace -p 31814
strace: Process 31814 attached
wait4(-1, 0x7ffeacbfbf9c, 0, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=27643, si_uid=1000} ---
+++ killed by SIGTERM +++
但是由于无限循环,子shell保持不变:
$ ps x | grep loop.sh
2443 pts/4 S+ 0:00 grep --color=auto loop.sh
31818 ? S 0:00 /bin/bash path/loop.sh
问题
我希望子外壳在 tmux 会话结束后自动终止。有没有办法通过更改 tmux 设置或处理SIGTERM
发送到sh -c
进程来做到这一点?
(编辑:tmux 版本是 2.8)