利用 fork 系统调用编写多进程程序,分别设置全局和局部变量检 测父子进程共享资源的情况。
时间: 2023-07-14 15:13:25 浏览: 122
Linux下的多进程编程初步
下面是一个使用 fork 系统调用编写的多进程程序,用于检测父子进程共享资源的情况:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int global_variable = 0;
int main() {
int local_variable = 0;
pid_t pid;
pid = fork();
if (pid < 0) {
fprintf(stderr, "Failed to fork\n");
exit(1);
} else if (pid == 0) { // 子进程
global_variable++;
local_variable++;
printf("Child process:\n");
printf("Global variable: %d\n", global_variable);
printf("Local variable: %d\n", local_variable);
} else { // 父进程
wait(NULL);
global_variable++;
local_variable++;
printf("Parent process:\n");
printf("Global variable: %d\n", global_variable);
printf("Local variable: %d\n", local_variable);
}
return 0;
}
```
在这个程序中,我们定义了一个全局变量 `global_variable` 和一个局部变量 `local_variable`。然后我们使用 fork 系统调用创建了一个子进程。
在子进程中,我们分别对全局变量和局部变量进行了加 1 操作,并打印出了它们的值。
在父进程中,我们使用 `wait` 函数等待子进程的结束,然后也对全局变量和局部变量进行了加 1 操作,并打印出了它们的值。
我们可以运行这个程序,观察输出结果,来检查父子进程是否共享资源。
运行结果可能为:
```
Child process:
Global variable: 1
Local variable: 1
Parent process:
Global variable: 2
Local variable: 1
```
从输出结果可以看出,父子进程共享全局变量,它们的值都被加 1 了。但是它们各自拥有自己的局部变量,互不干扰。
阅读全文