要么我无法正确地搜索我的搜索,要么答案不容易找到!,但我想弄清楚如何列出我的所有后台任务PID。例如:
到目前为止,我发现要列出我们使用的最后一个PID:
$!
但是现在我想在此之前列出任务的PID(如果存在),但我找不到如何做到这一点。不好意思我想列出我所有的后台任务PID。
我知道我们也可以找到最后一份工作ID:
%% (last job in list)
%1 (first job in list)
%2 (second job in list)
但是对于进程ID似乎没有用吗?
全部谢谢:)
答案 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的人也在这里有答案。)