暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux 中如何查找进程的 PID 和 PPID

TIAP 2022-08-24
3789

在 Linux 系统中,了解进程的 PID PPID 对管理系统上运行的进程来说是非常有用的。目前有多种方法可以获取给定进程的PID(Process ID)和 PPID(Parent Process ID)。

命令
介绍
pidof process_name根据进程名称获取 PID
pgrep process_name返回所有匹配关键词的 PID
ps -o ppid= -p PID根据PID获取PPID
$$
当前进程(shell)的PID
${PPID}当前进程父进程的PID


本文将会详细解释这些命令。但是在此之前,先简单了解一下进程、PID 和 PPID。


Linux进程基础

系统中所有的程序都是通过进程来运行的,进程是程序的运行实例。而所有的这些进程都被分配了标识符,用于标记进程。如果你想监视进程(比如查看它占用多少内存或CPU),或者想要结束进程,那么这些标识符会非常有用。

这里所说的标识符就是指的 PID 和 PPID。


PID 是什么?

PID 表示进程ID(Process ID)。在程序开始运行的时候就会产生相应的 PID,如果我们想要与进程交互,那么 PID 是绕不开的。


PPID 是什么?

PPID 与 PID 密切相关,表示父进程ID(Parent Process ID)。换句话说,就是创建某个进程的进程ID。

比如,假如我们有两个进程,一个名为 spawner,进程ID(即 PID)为 7234;然后第二个进程名为 email client,进程ID(PID)为 7456。进程 spawner 启动了 email client,所以对于进程 email client 来说,PID 为 7456,PPID 为 7234。

至此我们对进程应该有了一个基本的认识,那么下面我们来看看如何获取进程ID。


获取进程的PID

要获取进程的PID,首先我们需要知道进程名称。根据进程名称获取进程ID,可以使用 pidof 命令:

    pidof exact_process_name

    有时候我们可能不知道进程的确切名称,那如果我们知道进程名开头的几个字母也可以,这个时候就需要用到 tab 键了。首先键入进程名称的前几个字符,然后点击 tab 键,系统就会给我们几个可能匹配的建议。

    这里,需要注意的是我们需要明确的知道进程名称的开头的几个字符,否则的话这个方法也是不奏效的。比如在 Linux 系统中, Edge 浏览器的进程名为 msedge,它不是以 edge 开头的,所以如果我们输入 edge,然后点击 tab 键后,是不起作用的。

    所以,这个时候我们需要使用 ps 命令来列出所有正在运行的进程,然后使用 grep 来过滤结果。

      ps aux | grep -i partial_process_name


      此外,有一个结合了 ps grep 特性的命令,叫做 pgrep

        pgrep partial_or_exact_process_name

        如上图所示,这个输出只有PID,没有任何其他的进程信息。所以如果你搜索的关键词返回了多个进程ID,那么就无法区分哪一个是你真正想要查找的。

        因此,我们可以使用列表功能来获取我们所需要的进程ID,通过使用 -l 选项来实现:

          pgrep -l partial_or_exact_process_name

          此外你也可以使用 top 命令来获取进程的信息,但是它不能在脚本中使用。

          注:我们还可以使用 pstree 命令来获取系统中所有运行的进程的PID:pstree -p -a


          通过子进程的 PID 来获取 PPID

          如果我们知道了进程的PID,那么就可以毫不费力的获取到 PPID。使用如下命令:

            ps -o ppid= -p PID

            在 shell 中,上述命令和 ${PPID} 返回的内容相同:

            以上就是查找 PID 和 PPID 的方法。


            查找当前运行进程的 PID 和 PPID

            如果你运行的是 bash,那么会很容易的找到被调用进程(通常为 shell)的 PID 和 PPID。

            bash 会将 PID 存储在变量 $$ 中,将 PPID 存储在 ${PPID} 中。

              # Prints the PID.
              echo "$$"
              # Prints the PPID.
              echo "${PPID}"

              这样,就可以获取 shell 及其子进程(subshell)的进程ID。


              以上就是本次分享全部内容,欢迎讨论。


              文章转载自TIAP,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论