fork函数注意事项
fork函数本质是将内存复制当 fork() 发生时操作系统把父进程当前的内存状态包括变量值、程序计数器 PC 等完整地拷贝了一份给子进程。想象你在读一本书看完的部分就被收起来了执行程序你读到了第 10 页fork()。突然复印机把你这个人连同你手里的书一起复印了一份。现在有两个你父和子。你们手里的书都翻在第 10 页。接下来你们两个人都会从第 11 页开始接着往下读。没有人会回到第 1 页重新开始读。一次调用两次返回fork() 函数非常神奇它调用一次却返回两次在父进程中 返回子进程的 PID一个大于 0 的正整数。在子进程中 返回 0。如果出错 返回 -1这种情况极少暂不讨论。假设我们要实现父进程负责打印 I am Father子进程负责计算 11 并打印结果。#include stdio.h #include unistd.h #include sys/types.h int main() { printf(程序开始运行...\n); // 【关键时刻】在这里发生分裂 pid_t pid fork(); // --- 分裂点 --- // 此时内存里有两个进程都在往下执行 if (pid 0) { // 【分支 A】只有父进程会进入这里 // 因为对于父进程pid 是子进程的ID比如 8834大于 0 printf(我是爸爸 (PID: %d)我的孩子是 %d\n, getpid(), pid); printf(爸爸的任务负责打印这句话。\n); } else if (pid 0) { // 【分支 B】只有子进程会进入这里 // 因为对于子进程pid 永远是 0 int result 1 1; printf(我是儿子 (PID: %d)我算出来的结果是: %d\n, getpid(), result); } else { // 错误处理 printf(创建失败\n); } printf(程序结束。\n); // 注意父子都会执行这一行 return 0; }

相关新闻