有没有办法检测活动窗格中运行的进程?
tmux:找到“我的”窗口,检查它是否处于活动状态是相关的,但是,它处理的是窗格内部的检测。
我需要从外部命令(而不是从 tmux 会话内部)检测这一点。
该问题很可能归结为两个步骤:
- 检测哪个窗格处于活动状态
- 检测给定窗格中运行的进程
答案1
事实证明,tmux 对 list-panes 命令具有强大的格式化功能:
$ tmux list-panes -F '#{pane_active} #{pane_pid}'
0 4993
0 5382
1 6189
上述命令将打印
1 <process_pid>
对于活动窗格。
格式化选项的描述如下man tmux
:
pane_active 1 if active pane
pane_pid PID of first process in pane
有关“窗格中的第一个进程”一词的讨论,请参阅tmux 中的“窗格的第一个 pid”是什么意思?
答案2
仅供参考,问题 #2 可以通过以下方式解决
ps fut
它打印出当前 tty 中运行的所有进程(每个窗格应该有唯一的 tty)
答案3
如果您想要的是当前进程的名称,请尝试:
$ tmux display -p "${pane_current_command}"
但是,这并不总是正确的,例如当进程是从 shell 脚本启动或通过按下v
less 来调用时$EDITOR
。在这些情况下,这种方法效果更好
$ tmux run "ps -o comm= -t '#{pane_tty}'" | tail -1
当然,您可以通过将参数更改为来获取更多详细信息ps
。或者您可以#{pane_tty}
用另一个tty替换。