如何在bash中列出所有背景pids

时间:2013-09-18 08:50:42

标签: bash background pid

要么我无法正确地搜索我的搜索,要么答案不容易找到!,但我想弄清楚如何列出我的所有后台任务PID。例如:

到目前为止,我发现要列出我们使用的最后一个PID:

$!

但是现在我想在此之前列出任务的PID(如果存在),但我找不到如何做到这一点。不好意思我想列出我所有的后台任务PID。

我知道我们也可以找到最后一份工作ID:

%% (last job in list)
%1 (first job in list)
%2 (second job in list)

但是对于进程ID似乎没有用吗?

全部谢谢:)

4 个答案:

答案 0 :(得分:17)

使用ps S。例如:

$ vim &
[1] 8263
$ ipython &
[2] 8264
$ ps S
 PID TTY      STAT   TIME COMMAND
 3082 pts/0    Ss     0:00 bash
 3137 pts/0    Sl+    0:00 python /usr/bin/ipython
 8207 pts/2    Ss     0:00 bash
 8263 pts/2    T      0:00 vim
 8264 pts/2    Tl     0:00 python /usr/bin/ipython
 8284 pts/2    Tl     0:00 python /usr/bin/ipython
 8355 pts/2    R+     0:00 ps S

如果你想在下面使用PID:

$ ps S | awk '{print  $  1 }' | grep -E '[0-9]'
3082
3137
8207
8263
8264
8284
8357
8358
835

此外,您可以使用jobs -l但它仅显示当前会话的后台进程。

答案 1 :(得分:7)

  

但是对于进程ID似乎没有用吗?

您可以尝试jobs -l-p-l-p开关导致jobs命令也输出进程ID。

答案 2 :(得分:1)

在bash中,就像在tcsh中一样,你可能想要的命令是jobs -l(对于Long)。

[ghoti@pc ~]$ sleep 300 &
[1] 33811
[ghoti@pc ~]$ sleep 301 &
[2] 33812
[ghoti@pc ~]$ sleep 302 &
[3] 33813
[ghoti@pc ~]$ jobs -l
[1]- 33811 Running                 sleep 300 &
[2]- 33812 Running                 sleep 301 &
[3]+ 33813 Running                 sleep 302 &
[ghoti@pc ~]$ 

答案 3 :(得分:1)

如果您还希望看到您的子进程不再被shell作为作业处理(例如,因为您disown故意或类似地编辑它们,那么您可以使用它来查找所有将作为其父级的流程:

grep "PPid:.*$$" /proc/[0-9]*/status | cut -d/ -f3

另外

ps --ppid $$

可以使用。 (致@Michael Kazarian的人也在这里有答案。)