qfedu-linux-advanced-level/day2/test_fork2.c

57 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
static int vax = 18; // 静态全局变量
int var = 10; // 全局变量
int main(int argc, char const *argv[])
{
pid_t pid;
int num = 9; // 局部变量
pid = fork(); // 创建子进程
if (pid < 0)
{
perror("fork");
}
if (pid == 0) // 子进程
{
vax--; // 子进程中修改静态全局变量 vax
var++; // 子进程中修改全局变量 var
num++; // 子进程中修改局部变量 num
printf("在子进程的 vax=%d, var=%d, num=%d\n", vax, var, num);
}
else // 父进程
{
sleep(1); // 父进程等待一秒钟
printf("在父进程的 vax=%d, var=%d, num=%d\n", vax, var, num);
}
printf("命令代码区\n"); // 在父进程和子进程中都会执行的代码
return 0;
}
/*
这段代码创建了一个子进程,并在父进程和子进程中分别修改和打印变量 var 和 num 的值。下面是代码的执行过程:
主进程开始执行,变量 var 被初始化为 10变量 num 被初始化为 9。
调用 fork() 创建子进程。
在父进程中fork() 返回子进程的进程ID所以 pid 不为0进入父进程的分支。
父进程调用 sleep(1) 休眠一秒钟,让子进程先执行。
在子进程中fork() 返回0进入子进程的分支。
子进程中var++ 将全局变量 var 的值加1num++ 将局部变量 num 的值加1。
子进程打印输出 "在子进程的 var=11, num=10"。
父进程等待一秒钟后恢复执行,继续执行下面的代码。
父进程打印输出 "在父进程的 var=10, num=9"。
打印输出 "命令代码区"。
程序结束。
*/
/*
由于 fork() 创建了一个子进程,子进程会复制父进程的内存空间,包括变量的值。因此,父进程和子进程拥有各自独立的变量副本,它们的修改互不影响。
在子进程中,变量 var 的值被增加到 11而变量 num 的值被增加到 10。在父进程中变量 var 保持为初始值 10变量 num 保持为初始值 9。这说明父进程和子进程中的变量是独立的。
最后的打印输出语句 "命令代码区" 在父进程和子进程中都会执行,因为它们是在 fork() 调用之前执行的代码。
*/