19

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

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

$!

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

我知道我们还可以通过以下方式找到最后一个工作 ID:

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

但是对于进程ID似乎不起作用?

谢谢大家:)

4

4 回答 4

29

使用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但它仅显示当前会话的后台进程。

于 2013-09-18T09:07:07.887 回答
14

但是对于进程ID似乎不起作用?

你可以试试jobs -l-p。和开关使命令也输出进程 ID -l-pjobs

于 2013-09-18T08:53:54.940 回答
5

在 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 ~]$ 
于 2013-09-18T08:54:12.270 回答
1

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

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

ps --ppid $$

可以使用。(感谢@Michael Kazarian,他在这里也有答案。)

于 2013-09-18T09:07:33.470 回答