1:进程扇:
父进程产生一系列子进程,每个子进程打印自己的PID然后退出。
要求:父进程最后打印PID。
代码实现:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
int i = 0;
int ret = 0;
pid_t pid;
for(i = 0; i < 4; i++){
printf("in for\n");
if((pid = fork()) == 0){
break;
}
}
if(pid == 0){
printf("child%d:%d parent:%d\n",i,getpid(),getppid());
exit(1);
}
if(pid > 0){
usleep(100); //如果没有睡眠,可能会导致没有等待到全部子进程退出
wait();
}
printf("parent:%d\n",getpid());
}
结果:
2:进程链
父进程派生一个子进程后,然后打印出自己的PID,然后退出,该子进程继续派生子进程,然后打印PID,然后退出,以此类推。
要求:
1:实现一个父进程要比子进程先打印PID的版本。(即打印的PID一般是递增的)
2:实现一个子进程要比父进程先打印PID的版本。(即打印的PID一般是递减的)
代码实现
1:递增
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
int i = 0;
int ret = 0;
pid_t pid;
for(i = 0; i < 4; i++){
if((pid = fork()) > 0){
break;
}
}
printf("parent:%d\n",getpid());
}
当父进程先执行结束退出后,就会打印出命令行xiang@…
2:递减
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
int i = 0;
int ret = 0;
pid_t pid;
for(i = 0; i < 4; i++){
if((pid = fork()) > 0){
break;
}
}
if(pid > 0){
usleep(100);
wait(); //等待子进程退出
}
printf("parent:%d\n",getpid());
}