fork()函数

来源:互联网 发布:养生软件下载排行榜 编辑:程序博客网 时间:2024/06/09 17:07

函数原型: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;//返回编号}
原创粉丝点击