在实验之前先给出结论:
1.由fork()创建的进程,子进程父进程运行的顺序时随机的;
2.进程之间相互独立(关注count的值)
3.fork()函数的返回值:
<0 : 进程创建失败;
>0 : 父进程;
=0 : 子进程;
4.fork()创建的子进程继承了父进程中的变量
代码实现
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
int main(){
pid_t pid; //创建父进程
int count=0; //在父进程中定义一个变量
pid=fork();//创建一个子进程
if(pid<0){
perror("fork error!");
exit(EXIT_FAILURE);
}//进程创建失败
else if(pid>0){
int parentID=getppid();//父进程的父进程id
printf("parent_id=%d\n",parentID);
int childID=getpid();//父进程 自己的id
printf("own_id=%d\n",childID);
count=count+5;
printf("count=%d\n",count);
}//父进程
else if(pid==0){
int parentID1=getppid();//子进程的父进程
printf("parentID1=%d\n",parentID1);
int childID1=getpid();//子进程自己的进程
printf("own_ID1=%d\n",childID1);
count=count+12;
printf("count=%d\n",count);
}//子进程
}
运行结果:
按照代码的顺序输出本应是:
parent_id=5610
own_id=5616
count=5
parentID1=5616
own_ID1=5616
count=12
但是此时子进程比父进程先运行,这就说明了:
结论1:由fork()创建的进程,子进程父进程运行的顺序时随机的;
代码中在父进程中我们设置 一个变量count=0;
在子进程中直接使用count做加法 count = count+5;子进程中输出count=5;
在父进程中做加法 count=count+12;父进程中输出count=12;
此时就证明了结论2 和结论4
结论2:进程之间相互独立
结论4:fork()创建的子进程会继承父进程中的变量
那么至于结论3,细心的话不难发现
父进程id是:own_id=5616
子进程id是: own_ID1=5621
子进程的父进程id是: parentID1=5616
由此可以证明结论3:
fork()函数的返回值:
<0 : 进程创建失败;
>0 : 父进程;
=0 : 子进程;
这里说明一下,博主也是一个初学者,如果实验过程中有什么不足,还请各位大佬多多指正,大家如果觉得本文内容对自己有那么一点点帮助的话,希望留下你的关注。