1.查看pid
方法 1:使用 pidof 命令
# pidof apache2
3754 2594 2365 2364 2363 2362 2361
从上面的输出中,你可能会遇到难以识别进程 ID 的问题,因为它通过进程名称显示了所有的 PID(包括父进程和子进程)。因此,我们需要找出父 PID(PPID),这是我们要查找的。它可能是第一个数字。在本例中,它是 3754
,并按降序排列。
方法 2:使用 pgrep 命令
pgrep
遍历当前正在运行的进程,并将符合选择条件的进程 ID 列到标准输出中。
# pgrep apache2
2361
2362
2363
2364
2365
2594
3754
这也与上面的输出类似,但是它将结果从小到大排序,这清楚地说明父 PID 是最后一个。在本例中,它是 3754
。
注意: 如果你有多个进程的进程 ID,那么在使用 pidof
和 pgrep
识别父进程 ID 时就可能不会很顺利。
方法 3:使用 pstree 命令
pstree
将运行的进程显示为一棵树。树的根是某个 pid,如果省略了 pid 参数,那么就是 init。如果在 pstree
命令中指定了用户名,则显示相应用户拥有的所有进程。
pstree
会将相同的分支放在方括号中,并添加重复计数的前缀来可视化地合并到一起。
# pstree -p | grep "apache2"
|- apache2(3754) -|-apache2(2361)
| |-apache2(2362)
| |-apache2(2363)
| |-apache2(2364)
| |-apache2(2365)
| `-apache2(2594)
要单独获取父进程,请使用以下格式。
# pstree -p | grep "apache2" | head -1
|- apache2(3754) -|-apache2(2361)
pstree
命令非常简单,因为它分别隔离了父进程和子进程,但这在使用 pidof
和 pgrep
时命令不容易做到。
方法 4:使用 ps 命令
ps
显示活动进程的选择信息。它显示进程 ID(pid
=PID)、与进程关联的终端(tname
=TTY)、以 [DD-]hh:mm:ss
格式(time
=TIME)显示的累计 CPU 时间、以及执行名(ucmd
= CMD)。输出默认是未排序的。
# ps aux | grep "apache2"
www-data 2361 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2362 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2363 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2364 0.0 0.4 302652 9732 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2365 0.0 0.4 302652 8400 ? S 06:25 0:00 /usr/sbin/apache2 -k start
www-data 2594 0.0 0.4 302652 8400 ? S 06:55 0:00 /usr/sbin/apache2 -k start
root 3754 0.0 1.4 302580 29324 ? Ss Dec11 0:23 /usr/sbin/apache2 -k start
root 5648 0.0 0.0 12784 940 pts/0 S+ 21:32 0:00 grep apache2
从上面的输出中,我们可以根据进程的启动日期轻松地识别父进程 ID(PPID)。在此例中,apache2 启动于 Dec 11
,它是父进程,其他的是子进程。apache2 的 PID 是 3754
。