在Linux系统中,了解进程的PID和PPID对于管理系统上运行的进程非常有用。 目前有多种方法可以获取给定进程的 PID (ID) 和 PPID (ID)。
介绍
皮多夫
根据进程名获取PID
正则表达式
返回所有匹配关键字的PID
ps -o ppid= -p PID
根据PID获取PPID
$$
当前进程的PID(shell)
${PPID}
当前进程的父进程的PID
本文详细解释了这些命令。 但在此之前,让我们先简单了解一下进程、PID 和 PPID。
Linux 进程基础知识
系统中的所有程序都是通过进程来运行的,进程是程序的运行实例。 所有这些进程都被分配了标识符,用于标记进程。 如果您想要监视进程(例如查看它使用了多少内存或 CPU),或者想要终止该进程,这些标识符非常有用。
这里所说的标识符是指PID和PPID。
什么是PID?
PID 代表进程 ID (ID)。 程序开始运行时会生成相应的PID。 如果我们想要与进程交互,PID是无法避免的。
什么是 PPID?
PPID 与 PID 密切相关,代表父进程 ID(ID)。 换句话说,它是已创建进程的进程 ID。
例如,如果我们有两个进程,其中一个进程名为 email,进程 ID(PID)为 7234; 第二个进程名为 email,进程 ID (PID) 为 7456。该进程启动了 email,因此对于进程 email,PID 为 7456,PPID 为 7234。
至此我们应该对进程有了基本的了解,那么我们就来看看如何获取进程ID。
获取进程的PID
要获取进程的PID,首先我们需要知道进程名称。 要根据进程名称获取进程ID,可以使用pidof命令:
pidof exact_process_name
有时我们可能不知道进程的确切名称,所以只要知道进程名称的前几个字母就可以了。 在这种情况下,我们需要使用tab键。 首先输入进程名称的前几个字符,然后点击tab键,系统会给我们几种可能的匹配建议。
这里需要注意的是,我们需要清楚地知道进程名的前几个字符,否则这个方法不起作用。 例如,在Linux系统中,Edge浏览器的进程名并不是以edge开头,所以如果我们输入edge然后点击tab键是不行的。
因此,这时候我们需要使用ps命令列出所有正在运行的进程,然后使用grep来过滤结果。
ps aux | grep -i partial_process_name
另外,还有一个结合了ps和grep的特点的命令,叫做pgrep。
pgrep partial_or_exact_process_name
如上图所示,这个输出只有PID,没有其他进程信息。 因此,如果您的搜索关键字返回多个进程 ID,则无法判断您实际要查找的是哪一个。
因此,我们可以使用list函数来获取我们需要的进程ID,通过使用-l选项:
pgrep -l partial_or_exact_process_name
另外,还可以使用top命令获取进程信息,但不能在脚本中使用。
注意:我们还可以使用命令来获取系统中所有正在运行的进程的PID:-p -a
通过子进程的PID获取PPID
如果我们知道进程的PID,我们就可以轻松获得PPID。 使用以下命令:
ps -o ppid= -p PID
在 shell 中,上述命令返回与 ${PPID} 相同的内容: