我知道该jobs
命令仅显示当前 shell 会话中运行的作业。
是否有 bash 代码可以显示当前用户跨 shell 会话的作业(例如,来自另一个终端选项卡的作业)?
答案1
(对我而言)不清楚jobs
除了列出当前用户 ( ) 拥有的所有进程之外,您还希望此全局调用执行什么操作ps x
,但您可以按终端和/或按状态过滤该列表。
列出您的流程:
- 连接到任意终端:
ps x |awk '$2 ~ /pts/'
- 由作业控制停止(Ctrl+z不带
bg
):ps x |awk '$3 ~ /T/'
- 前台运行:
ps x |awk '$3 ~ /\+/'
AWK真的很强大。在这里,我们只是按数字调用字段并$
使用正则表达式匹配器 ( ) 查看它们的值 ( ) ~
。您可以使用 反转匹配!~
。这些是条件,我们只是使用 AWK 的默认操作(打印匹配项,也可以写成{ print $0 }
打印整行)。
您可以在 AWK 命令中添加标题'NR == 1 || …
(记录数 = 1,也称为第 1 行)。这些可以组合起来,例如ps x |awk 'NR == 1 || $3 ~ /T/ || $2 ~ /pts/
。使用正则表达式,您可以将前两个项目符号组合为ps x |awk '$3 ~ /[T+]/'
.这些条件语句是逻辑性的,所以你可以用 和 括号组合||
,&&
例如ps x |awk 'NR == 1 || ($3 ~ /\+/ && $2 ~ /pts/)'
我怀疑你想要的是:ps x |awk 'NR == 1 || $2 ~ /pts/
我在 Linux 系统上运行了这个。如果您正在运行其他程序,您的终端模拟器的名称可能会有所不同。运行ps $$
以查看您的活动 shell 如何显示在列表中,并从第二列构建正则表达式。