通过fork产生子进程后,在以下子进程中发生改变的时候不会引起父进程中相应的改变的有()
A 文件指针
B 局部变量
C 全局变量
D 静态变量
答案应该是无答案
linux下父进程创建子进程后,子进程会复制父进程的用户层空间的数据,实际上子进程继承到的数据只是父进程的副本,所以修改子进程里的数据不会影响到父进程。
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h> // 为了使用waitpid()
int a = 10; // 全局变量
static int sta = 20; // 静态变量
int main() {
pid_t child;
int sum = 30; // 局部变量
child = fork(); // 创建子进程
if (child == -1) {
// 如果fork失败,则输出错误信息
perror("fork failed");
exit(1);
} else if (child == 0) {
// 子进程
sum = 9;
a = 9;
sta = 9;
printf("Child process: pid==%d a==%d sta==%d sum==%d\n", getpid(), a, sta, sum);
exit(0); // 子进程执行结束
} else {
// 父进程等待子进程结束
waitpid(child, NULL, 0);
// 输出父进程中变量的值,以验证它们是否被子进程修改
printf("Parent process: pid==%d a==%d sta==%d sum==%d\n", getpid(), a, sta, sum);
}
return 0;
}
根据结果显示,父进程的局部变量、全局变量、静态变量不会随着子进程的改变而改变。