fork()函数详解

编写一段程序(程序名为fork.c),使用系统调用创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动,父进程显示字符a”,子进程分别显示字符“b”和“c”。

源程序如下

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

int main()

{

int pid1,pid2;

printf("a\n");

if((pid1=fork())<0)

{

printf("Child1 fail create!\n");

return 1;

}

else if(pid1==0)

{

printf("b\n");

return;

}

if((pid2=fork())<0)

{

printf("Child2 fail create!\n");

return 1;

}

else if(pid2==0)

{

printf("c\n");

return;

}

}

Linux操作系统vi编辑器中,键入此程序,运行后,得如下结果:

 

该程序分析如下:

#include<stdio.h>

#include<sys/types.h>

/*  #include<sys/types.h>是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。*/

#include<unistd.h>

/*  #include<unistd.h>是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。 */

int main()

{

int pid1,pid2;

printf("a\n");

if((pid1=fork())<0)

/*  fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就两个进程可以完全做相同的事,但如果初始化参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的进程中,只有少数值与原来发的进程的值不同,相当于克隆了一个自己。

1、在父进程中,fork返回新创建子进程的进程ID

2、在子进程中,fork返回0

3、如果出现错误,fork返回-1 */

{

printf("Child1 fail create!\n");   //fork()返回-1,子进程b创建失败。

return 1;

}

else if(pid1==0)   //fork()返回0,子进程b创建成功。

{

printf("b\n");

return;

}

if((pid2=fork())<0)

{

printf("Child2 fail create!\n");   //fork()返回-1,子进程c创建失败。

return 1;

}

else if(pid2==0)    //fork()返回0,子进程c创建成功。

{

printf("c\n");

return;

}

}

 

猜你喜欢

转载自blog.csdn.net/qq_38855717/article/details/80232931