假设,作为一个虚拟示例,我在一个终端选项卡中执行 bash 命令:
$: sleep 1000 &
然后,在另一个选项卡中,我运行应该“杀死所有后台作业”的命令:
$: jobs -p | xargs -a kill
除非什么也没有发生。或者,更好的是:如何列出我的用户通过<some-job> &
任何上下文启动的所有作业?
答案1
该jobs
命令是 shell 内置命令,因此仅适用于当前 shell 实例化。特别是,Bash 手册描述jobs
为:
-p
仅列出进程 ID作业流程组组长的。
(强调我的。)
如果您运行jobs -l
,您将看到您在另一个 shell 中后台运行的 sleep 也没有列出。
列出命令全部流程是ps
.它的参数语法可能有点巴洛克式,所以你最好man ps
自己检查一下。对于我自己来说,我通常使用其中之一:
ps aux
ps axjf
一个仅给出所有进程的列表,另一个以依赖树格式排列它们。您也可以尝试pgrep
作为查找与名称匹配的特定进程的方法。
附带说明一下,如果您在存在安全问题的环境中操作,请注意,有一些偷偷摸摸的方法甚至可以对 root 用户隐藏进程,例如,请参阅https://github.com/gianlucaborello/libprocesshider。