linuxc fork函数简单介绍

来源:互联网 发布:手机淘宝缓存文件在哪 编辑:程序博客网 时间:2024/05/21 05:17

Fork函数详解

Fork函数主要是用于子进程的建立,在c的#include<unistd.h>中。下面以一个程序为例子说明fork函数的简单应用。

/*

 * fork.c

 *

 * Created on: 2014-12-2

 *     Author: Administrator

 */

 

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

int main(int argc,char *argv[]) {

   printf("getpid:%d--------------\n",getpid());

   pid_t  pid=0;

   pid=fork();

   if(pid<0)

   {

      printf("opps,create fork error\n");

   }

   else if (pid ==0)

   {

      printf("yeahi am son\n");

      printf("son,pid:%d\n",getpid());

      printf("in songetppid() :%d\n",getppid());

 

      int i=0;

      int sum =0;

      for(i;i<1000;i++)

      {

         sum+=i;

      }

      printf("sum=%d\n",sum);

   }

   else

   {

 

      printf("i am dad\n");

      printf("ret_id:%d\n",pid);

      printf("father:pid:%d\n",getpid());

      printf("in fathergetppid() :%d\n",getppid());

 

 

   }

   return 0;

}

printf("getpid:%d--------------\n",getpid());

此句话为了打印main函数所开的进程的进程id,getpid()函数可获得当天进程的id,同时返回进程id号

 

pid=fork();

   fork()是分出一个子进程,进程在出现fork的时候,就开始复制主进程的一个副本,注意这里的复制时从fork开始,所以上一句printf是只会打印一次。Fork返回三个值就是负数,0,以及正数。如果是负数表明因为某种原因没办法创建子进程,0当天正在执行后面的代码的进程是子进程,因为fork如果创建了子进程这里的返回值就是子进程号,这里是0所以没有子进程的号,索命此时进程就是子进程。所以正数也很容易理解,就是说明后面的就是父进程在执行后面的代码段。如果创建成功的话,会执行两次分别是0的父进程以及非0的子进程。

 

else if (pid ==0)

通过pid==0可以判定子进程的时候就要进入if,在getpid和getppid,分别得出的应该是当天子进程的ID(这个可以再进入主进程的时候验证)和父进程的ID也就是第一句printf的ID。

 

Else

表明此时是父进程在使用CPU的时间片,在这里有几个打印语句来验证

 

printf("i am dad\n");

表明我进入了父进程

 

printf("ret_id:%d\n",pid);

printf("father:pid:%d\n",getpid());

printf("in fathergetppid() :%d\n",getppid());

第一句为了验证fork是否返回的是子进程号可以与上面的子进程的ID做对比

第二句获取主进程的ID,校验是否一致

第三句是主进程的父进程是啥,我返回的是1不知道啥意思。现在知道了,1是系统的init进程所以理论来说所有的应用程序的父进程就是ID=1的init进程

 

这是我的结果:

getpid:11624--------------

yeah,i am son

son,pid:11688

in songetppid() :11624

sum=499500

getpid:11624--------------

i amdad

ret_id:11688

father:pid:11624

in fathergetppid() :1

         这是fork的简单实用,但是如果我使用一个for循环来建立多个子进程,此时会出现多少个子进程呢,以及他们对应的意思?

 

 

0 0
原创粉丝点击