a.out 运行后是一个进程,执行到 fork() 时,操作系统创建一个子进程。此后,父进程和子进程都会从 fork() 后面继续执行。

父进程的fork会返回子进程的pid,而子进程的fork会返回0。

                  fork()

                      │

┌─────┴─────┐

↓                                       ↓

父进程                            子进程

a.out                               a.out

 创建一个fork.c程序。首先printf模拟代码运行根据父进程的fork会返回子进程的pid,而子进程的fork会返回0。

可以写出判断语句,且出错输出-1.

输出结果展示

 子进程创建成功,由于我们上面提到过a.out 运行后是一个进程,执行到 fork() 时,操作系统创建一个子进程。此后,父进程和子进程都会从 fork() 后面继续执行。所以生成了两个end

getpid与getppid

 getpid用于获取子进程的

pidgetppid用于获取父进程的pid

 在这里有一个普遍问题:为什么父进程也有父进程

针对父进程的父进程,我们可以通过grep调查

 可以看到,调用fork时,bash(PID 2851)启动了 fork 程序(PID 13702)

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐