如何在Linux中查找父进程ID

时间:2020-01-09 10:39:13  来源:igfitidea点击:

说明

如何从命令行在Linux中查找父进程ID。

我们还将学习如何使用ps命令查找给定的父进程ID的子级。

我们还将介绍如何使用pstree命令输出完整的父流程树。

父流程ID环境变量

当前上下文的父进程ID作为环境变量公开。要查看该值,我们可以将其回显。

echo $PPID

例如,如果我们将SSH连接到Linux服务器,则$ PPID环境变量的值将是SSH进程的进程ID。

环境变量仅输出进程ID。要查看父进程是什么,我们可以将ps命令和$ PPID环境变量一起使用。

ps -e | grep $PPID

查找正在运行的进程的父进程ID

为了确定特定进程的父进程,我们使用ps命令。

ps -o ppid= -p 9801

输出仅包含父进程ID本身。使用ps命令的输出,我们可以确定进程的名称。

ps -e | grep 9801
2029 ?        00:00:14 apache2

列出父流程ID的子流程

使用父进程ID,我们可以使用pgrep命令来查找使用父进程的所有子进程。

pgrep -laP $PPID

对于典型的SSH父级,输出将列出以下过程

30797 -bash
30798 /usr/lib/openssh/sftp-server

显示过程树

另一个有用的工具是" pstree"命令。此命令将输出父进程ID的子进程树。例如,要显示当前父进程的子进程树,我们将运行以下命令。

pstree $PPID
sshd─┬─bash───pstree
     └─sftp-server

从上面的示例中,我们可以看到sshd进程是我们当前的父进程ID(PPID),并且它具有两个子进程。子进程是bash和sftp-server。

我们还可以看到bash进程有自己的子进程,这就是我们刚刚执行的pstree命令。

pstree命令还可以输出树中每个进程的进程ID。要输出进程ID,请使用-p标志。这是Apache Web服务器的进程树的示例。

pstree -p 2029
apache2(2029)─┬─apache2(9790)
              ├─apache2(9791)
              ├─apache2(9792)
              ├─apache2(9793)
              ├─apache2(9794)
              ├─apache2(9795)
              ├─apache2(9796)
              ├─apache2(9797)
              ├─apache2(9798)
              ├─apache2(9799)
              ├─apache2(9800)
              ├─apache2(9801)
              ├─apache2(9802)
              ├─apache2(9803)
              ├─apache2(9804)
              ├─apache2(9805)
              ├─apache2(9806)
              ├─apache2(9807)
              ├─apache2(9808)
              ├─apache2(9809)
              ├─apache2(9836)
              ├─apache2(9944)
              ├─apache2(15517)
              ├─apache2(21980)
              └─apache2(29107)