进程创建-----------函数 fork() 代码实例:

在实验之前先给出结论:

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 :  子进程;

这里说明一下,博主也是一个初学者,如果实验过程中有什么不足,还请各位大佬多多指正,大家如果觉得本文内容对自己有那么一点点帮助的话,希望留下你的关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值