fork()函数

函数原型:pid_t fork(void);
system,popen,exec都是通过运行指定进程,含路径
fork没有参数,是赋制进程,子进程和父进程执行位置和执行状态都一样。

fork:创建一个子程序,子进程执行当前程序的副本,返回值为子程序的PID
fork函数的特点:调用一次,返回”两次”
fork函数创建子进程后,父子进程并发执行

子进程是在fork()执行过程中产生,再接着子进程和父进程都执行完,都返回PID,但父子进程返回值不同,父进程返回子进程pid,子进程返回0,这是区分父子进程的原理。

一个父亲,多个孩子进程的框架结构

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
    int i;
    pid_t pid;//一个父亲,多个孩子
    for(i=0;i<3;i++)//i为几就产生几个进程//每个子进程i值不同
    {
        pid=fork();
        if(pid<0)
            perror("fork");
        if(pid==0)//只有父进程能产生子进程,子进程不能产生子进程
            break;
    }
    //***************************************************************
    //给不同子进程派任务
    switch(i)//0-4为子进程,5为父进程,共6个进程
    {
            case 0:  //0号子进程
                    {
                        sleep(3);
                        printf("i am 0\n");
                    }
                    break;
            case 1:  //1号子进程
                    {
                            sleep(5);
                            printf("i am 1\n");
                    }
            case 2: //父进程
                    {
                            int ret;
                            pid_t pid1;
                            for(i=0;i<5;i++)//等5个子进程结束
                            {
                                    //  wait(NULL);
                                    pid1=wait(&ret);//获取子进程的pid和返回值
                                    printf("%d号子进程(PID:%d)执行完毕\n",WEXITSTATUS(ret),pid1);
                            }
                    }
                    break;
    }
    return i;//返回编号
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值