如何创建进程链、进程扇、进程树
进程链,是由父进程fork生成子进程,再由子进程fork派生出孙子进程
1、图解说明
1、图解说明
2、代码示例
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int n = 4;
pid_t pid; //创建一个进程,给它一个pid
for(i = 0; i < n; i++) //循环创建
{
pid = fork(); //该进程作为父进程fork出子进程
if(pid < 0) //如果出错的话pid<0
{
perror("fork error");
exit(1); //退出程序
}
else if(pid > 0) //如果是父进程,pid>0
{
break; //父进程退出循环,子进程继续做循环
}
}
printf("pid: %d, ppid: %d\n", getpid(), getppid()); //打印pid和其父进程的pid
sleep(1); //等待,给进程创建反应时间
}
3、运行结果
进程扇,是由一个进程fork派生出多个子进程
1、图解说明
1、图解说明
2、代码示例
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int i;
int n = 4;
pid_t pid; //创建一个进程,给它一个pid
for (i=0 ;i<n; i++) //循环
{
pid=fork(); //在循环里fork,由一个父进程fork出多个子进程
if(pid < 0) //如果pid<0,说明有错误
{
printf("fork error"); //报错
}else if (pid == 0) //如果当前pid==0说明是子进程,跳出循环
{
break;
}
//父进程继续参与创建
}
printf("My pid is %ld,My parent pid is %ld\n",(long)getpid(),(long)getppid());
sleep(1);
}
3、运行结果
进程树,像树一样,往下fork生成子进程
1、图解说明
1、图解说明
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int n = 4;
int i, id=0;
pid_t pid; //创建一个进程,给他一个pid
for (i=1;i<N;++i) //循环
{
pid = fork(); //创建子进程
if(pid == 0) //如果是子进程
{
id = i; //把i赋值给id表示树的第几个孩子
}
}
printf("#%d is process %ld with parent %ld\n",id, (long)getpid(), (long)getppid());
}
运行结果