父进程创建子进程的目的:
1、父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等待客户端的服务请求。当请求到达,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求的到达。
服务器—fork—客户端1
—fork—客户端2
—fork—客户端3
……
2、一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec(调用另一个进程,看之后的博客)
客户端接入请求fork建立子进程,代码演示:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
int data=10;
while(1){
printf("please input a data\n");
scanf("%d",&data);
if(data==1){
pid=fork();
if(pid>0){
}
if(pid==0){
while(1){
printf("do net request,pid=%d\n",getpid());
sleep(3);
}
}
}
else{
printf("wait,do nothing\n");
}
}
pid=fork();
if(pid>0){
printf("this is father print\n");
}
if(pid==0){
printf("this is child print,pid=%d\n",getpid());
data=data+100;
}
printf("data=%d\n",data);
return 0;
}
代码演示结果:可以输入1来创建多个子进程,每个子进程的pid号都不同
please input a data
1
please input a data
do net request,pid=22291
do net request,pid=22291
2
wait,do nothing
please input a data
3
wait,do nothing
please input a data
4
wait,do nothing
please input a data
5
wait,do nothing
please input a data
do net request,pid=22291
3
wait,do nothing
please input a data
do net request,pid=22291
1
please input a data
do net request,pid=22294
do net request,pid=22291
do net request,pid=22294
do net request,pid=22291
do net request,pid=22294
do net request,pid=22291
1
please input a data
do net request,pid=22296
do net request,pid=22294
do net request,pid=22291
do net request,pid=22296
do net request,pid=22294
do net request,pid=22291
总结: