C语言——fork函数

2 篇文章 0 订阅

一、fork函数的使用

fork函数被声明在unistd.h头文件中,包含

#include <unistd.h>

这个头文件即可调用。

C语言创建子进程是调用fork(),废话少说,如下一段程序:

int main ()   
{   
    pid_t fpid; //fpid表示fork函数返回的值  
    int count=0;  
    fpid=fork();   //以下的语句父进程和子进程都会执行,主要用pid来区分
    if (fpid < 0)   
        printf("error in fork!");   
    else if (fpid == 0) {  
        printf("i am the child process, my process id is %d/n",getpid());   
        printf("我是爹的儿子/n");//对某些人来说中文看着更直白。  
        count++;  
    }  
    else {  
        printf("i am the parent process, my process id is %d/n",getpid());   
        printf("我是孩子他爹/n");  
        count++;  
    }  
    printf("统计结果是: %d/n",count);  
    return 0;  
}  



fork()之后的语句父进程和子进程都会执行,新主要用pid来区分,进程也会分配到新的内存空间,上面的count是两个进程中的不同内存中的变量,没有任何意外,上面的程序运行结果当然是:

运行结果:

    i am the parent process, my process id is 3323
    我是孩子他爹
    统计结果是: 1

    i am the child process, my process id is 3324
    我是爹的儿子
    统计结果是: 1

进程运行不一定是上面这个顺序,要看系统的进程调度策略。



二、fork函数结合与或逻辑的实践

遇到一个又去的试题:

以下一段程序中,main进程共创建了多少个子进程?

#include <stdio.h>  
#include <unistd.h>  
int main(int argc, char* argv[])  
{  
   fork();  
   fork() && fork() || fork();  
   fork();  
   return 0;  
} 


答案是:总共有20个进程,除了main进程,还有19个子进程。

分析如下:

main函数中第2行和第3行代码顺序先后不会影响结果,故提出第2行代码 fork() && fork() || fork(),标记为 a && b || c,

根据语法有

a非0(a父进程),则执行b,有 1 && 1 和 1 && 0 || 1 及1 && 0 || 0;

a为0(a子进程),则不执行b,而执行c,有 0 && || 1 和0 && || 0;

共有5个分支,也就是说,fork() && fork() || fork()共创建了5个进程,而前面还有2个fork,所以进程数为:

4*5=20个进程。

so.......................


  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值