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

57 lines
2.3 KiB
C
Raw Permalink Normal View History

2023-08-15 19:05:13 +08:00
#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()
*/