经典linux把进程分为5个状态,运行态,停止态,等待态(两种),僵死态。
还有一种划分法: 就绪态,运行态,挂起态,停止态。
如果想要父进程一次创建多个子进程,应该使用如下代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int i;
for(i=0;i<4;i++)
{
pid=fork();
if (pid==-1){
perror("fork");
exit(1);
}
else if(pid==0)
break;
}
if (i<4)
{
printf("i am %d child,pid=%u\n",i+1,getpid());
}
return 0;
}
如果想创建4个子进程,直接写fork的话,实际上会创建出2的4次方-1个,因为每一个子进程在循环时也在调用fork,创建出了孙进程。
所以必须屏蔽掉子进程本身的创建,核心在于如果子进程运行(pid=0)推出循环。
运行结果:
再详细梳理一下代码的执行流程,在if语句中添加
else if(pid==0)
break;
else
{
printf("parant\n");
}
执行结果: