调用fork()编写一段程序,在子进程中修改变量,并在父进程中观察其影响,并分析原因
时间: 2024-09-27 20:07:44 浏览: 28
在Unix/Linux操作系统中,`fork()`函数是一个系统调用,它用于创建一个新的进程,称为子进程,同时复制当前进程的所有状态(包括内存、文件描述符等)。下面是一个简单的C语言示例,演示了如何通过`fork()`在子进程中修改全局变量,然后在父进程中观察这个改变:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int shared_var = 0; // 全局共享变量
void modify_variable(int child_num) {
if (child_num == 0) { // 子进程
printf("Child process (%d): Modifying shared_var\n", getpid());
shared_var = 5;
printf("New value of shared_var in child: %d\n", shared_var);
} else { // 父进程
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) {
modify_variable(1); // 子进程执行
exit(0); // 确保子进程退出
}
wait(NULL); // 等待子进程结束
printf("Parent process: Before wait, shared_var = %d\n", shared_var);
// 父进程在子进程结束后读取shared_var
printf("Parent process: After wait, shared_var = %d\n", shared_var);
}
}
int main() {
modify_variable(0); // 主进程开始执行
return 0;
}
阅读全文