如何检查哪些(如果有)多路复用器会话有进程/命令仍在运行

如何检查哪些(如果有)多路复用器会话有进程/命令仍在运行

我在一台共享 Linux 服务器上操作。团队成员通常会打开几个 tmux 会话并运行一些长时间运行的命令,然后断开他们的 ssh 会话。最终他们启动的进程会完成,但他们可能要再过一两周才会重新连接。

我们有时想重置所述 Linux 服务器,但我们想检查当前打开的任何 tmux 会话中是否还有正在运行的进程/程序/命令。除了附加到每个 tmux 会话并循环浏览每个窗口外,我如何检查哪些 tmux 会话仍有正在运行的进程/命令,更好的是,查看仍在运行的命令是什么?

如果有一种方法可以做到这一点,即与多路复用器无关(例如,它可以与 tmux 和屏幕一起使用),那就更好了。

答案1

如果你不介意需要人工来解析结果,

ps -auxf | grep "tmux\|screen" -A 5

效果很好。传递-xf到会ps以树状方式列出其父进程下的子进程,并在启用几行上下文的情况下 grep tmux/screen/etc(在此示例中使用-A(fter) 5)会显示您需要了解的几乎所有内容。

答案2

要 grep tmux PID,您可以使用;

ps aux | grep tmux | grep -v grep | awk '{print $2}' 

要获取活动子进程树,请换出< 进程 ID >在以下命令中;

ps --forest $(ps -e --no-header -o pid,ppid|awk -vp=<PID>'function r(s){print s;s=a[s];while(s){sub(",","",s);t=s;sub(",.*","",t);sub("[0-9]+","",s);r(t)}}{a[$2]=a[$2]","$1}END{r(p)}')

对于不太详细的列表,您可以使用 pstree

pstree -h <PID>

相关内容