如果您需要管理系统上运行的进程或与之交互,了解进程的 PID 和 PPID 会很有帮助。
在 Linux 中,有很多方法可以获取给定进程的 PID(进程 ID)和 PPID(父进程 ID)。
命令 | 描述 |
---|---|
pidof 进程名 | 使用确切的进程名称 |
pgrep 进程名称 | 返回所有匹配的 PID |
ps -o ppid= -p PID | 从 PID 获取 PPID |
$$ | 当前进程/shell的PID |
${PPID} | 当前进程父进程的PID |
我将详细解释这些命令,但在此之前快速回顾一下进程、PID 和 PPID。
Linux进程基础
在您的系统上运行的所有东西都是通过称为进程的东西运行的,它只是程序的运行实例。
在您的系统上运行的所有进程都被分配了标识符。 如果您想监控过程,这些可能会有所帮助(对于 example,例如查看它正在使用多少内存或 CPU),或者如果它开始挂起或只是表现得有点古怪,你可能想结束它。
附加到所有这些进程的标识符称为 PID 和 PPID。
什么是 PID?
PID 代表“进程 ID”。 同样,这只是程序开始运行时附加到程序的标识符,如果您需要以一种或另一种方式与进程交互,它会很有帮助。
什么是 PPID?
PPID 与 PID 密切相关。 PPID 代表“父进程 ID”,如果您还没有得到它,它只是代表创建您正在检查的进程的进程。
为了 example,假设我们有两个进程。 一个名为“spawner”,进程 ID(或 PID)为 7234。我们的第二个进程“电子邮件客户端”在创建时的进程 ID 为 7456。 我们的 spawner 程序启动我们的电子邮件客户端,导致我们的电子邮件客户端的 PID 为 7456,PPID 为 7234,因为生成器(其 PID 为 7234)是生成电子邮件客户端的原因。
现在你已经刷了基础,让我们看看如何在 Linux 中获取进程 ID。
获取进程的PID
这里重要的是要知道要查找其 PID 的进程的名称。
如果您知道确切的进程名称,您可以使用 pidof
命令:
pidof exact_process_name
说起来容易做起来难,因为您可能并不总是知道确切的进程名称。 这里的好处是 pidof
命令与制表符完成一起使用,因此如果您知道进程名称的开头几个字母,则可以单击制表符以获取匹配的建议。
但是,如果进程名称与您认为的名称不匹配,这可能并不总是有效。 为了 example过程为 Edge Linux 上的浏览器称为 msedge
. 它不是以“edge”开头的,如果您专注于“edge”,则选项卡完成将不起作用。
因此,您可以做的是在 Linux 中使用 ps 命令列出所有用户的所有正在运行的进程,然后在输出上使用 grep 来过滤结果。
ps aux | grep -i partial_process_name
有一个专门的命令结合了 ps 和 grep 命令的特性,不出所料,它被称为 pgrep
:
pgrep partial_or_exact_process_name
默认输出仅显示 PID,没有任何有关进程的信息。 如果为您的搜索词返回多个进程 ID,这可能会很麻烦。
因此,我建议使用列表功能来确保您获得所需进程的 PID。
pgrep -l partial_or_exact_process_name

您也可以使用 top 命令获取进程信息,但不能在脚本中使用。
?您可以使用 pstree 命令获取 Linux 系统上所有正在运行的进程的 PID: pstree -p -a
从子进程的 PID 获取 PPID
一旦知道进程的 PID,就可以轻松找到该进程的 PPID。
您可以简单地运行以下命令,替换 PID
使用当前进程(子)ID:
ps -o ppid= -p PID
在 shell 中,上述命令和 ${PPID}
都应该返回相同的输出:

这就是寻找 PID 和 PPID 的全部内容!
查看当前运行进程的PID和PPID
如果您在 Bash 等 shell 中,则非常容易找到调用进程(通常是 shell)的 PID 和 PPID。
Bash 将 PID 的值存储在 $$
变量,以及下的 PPID ${PPID}
多变的:
# Prints the PID.
echo "$$"
# Prints the PPID.
echo "${PPID}"
查找当前进程的 PID 和 PPID 的命令。
这样就可以得到shell和subshell的进程ID。

就这么简单! 查找其他进程的 PID 和 PPID 也并不难。
总结
您现在应该知道在系统上找到运行进程所需的 PID 和 PPID 所需的一切。
如果您需要任何帮助以使某些工作正常进行,或者只是有一些剩余的问题,请随时在下面的评论中留下它和其他任何内容。