fork函数

案例1

如下代码一共创建多少个进程(包含主进程)


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

测试一下

加个getchar()

查看进程状态

ps ajx

总共24个。

fork是一个分叉函数。

如果调用成功,父进程返回子进程id,子进程返回0;

如果调用失败,父进程返回-1,没有子进程创建成功。

分析:

总共有三行有fork函数,这里用第一行、第二、第三行表述。

(1)第一行的fork函数将为main函数创建一个子进程,此时总共有2个进程。

(2)第二行的第一个fork函数将为上述的2个进程创建子进程,此时总共4个进程。

(3)由于子进程的返回值是0,所以第二行的第二个fork函数只有2个父进程创建了2个子进程,此时总共有6个进程;第二行第三个fork函数同理,也只有2个父进程创建的子进程,此时总共有8个进程。

(4)第三行的第一个fork函数将为上述8个进程都创建子进程,此时总共有16个进程。

(5)第三行的第二个fork函数中8个父进程将不能创建子进程(||短路特性),而(4)中的8个子进程因为返回值都是0而再创建8个进程,有多了8个进程,此时总共有24个进程。

案例2

for循环中的fork函数。下述代码总共创建多少个进程

#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
 
int main()
{
    pid_t pid;
    int idx = -1;
    
    for (int i = 0; i < 3; i++) {
        pid = fork();
        
    }
   
    while (1);    
    return 0;
}

 执行

总共8个

满二叉树的最底层叶子个数。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值