前言
在 Linux 系统中,进程是操作系统最重要的执行单元,而父子进程的创建与管理更是系统资源分配和任务并行的关键。通过 fork 函数,Linux 能够快速高效地复制一个进程,使得父子进程协同工作成为可能。理解父子进程的运行机制不仅有助于掌握系统编程的核心技能,更能为优化资源利用与提高程序性能提供理论基础。
一、进程 PID
PID 是用来唯一标识一个进程的属性,我们可以使用 ps 指令查看一个进程的部分属性。进程的属性信息是由操作系统来维护的,这些信息被存储在一个 task_struct 结构体中,属于操作系统内核中的数据。由于操作系统本身是不相信用户的,所以用户无法直接去访问 task_struct 对象中的成员,因此 ps 指令能够显示进程的属性信息,本质上是通过系统调用接口去实现的。
1.1 通过系统调用接口查看进程 PID
获取进程的 PID 需要用到系统调用接口 getpid(),该函数会返回调用该函数的进程的 PID,返回值类型为 pid_t。如下图我们使用 man getpid 指令去查看 getpid 的基础文档:

注意上图中还有一个 getppid 是什么呢?不难猜到,这应该是用来获取父进程 PID 的系统调用接口,接下来我们写段代码来具象化 PID 吧。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
while (1) {
printf("I am a process, my id is: %d, parent id is: %d\n", getpid(), getppid());
sleep(1);
}
return 0;
}
我们可以写一个脚本来实时获取上面这段代码执行起来后的进程信息。











