按当前用户列出所有 shell 会话(不仅仅是当前 shell)中的所有作业

按当前用户列出所有 shell 会话(不仅仅是当前 shell)中的所有作业

我知道该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 如何显示在列表中,并从第二列构建正则表达式。

相关内容