Hi,百无聊赖写blog。本文所涉及的所有内容是存在笔者没有发现的错误的,所以请以批判的角度阅读,希望高手留下珍贵的留言,于此感激不尽。
然后,这些是记录笔者个人对有关知识点的认知和理解,希望在recording的同时,能够提高我的英语词汇运用,也能够将自己对C语言的热爱,开源和分享的思想在社区传播。
Alright!Nonsense is over,let's get into the code world!
First:代码素材
#include
#include
#include
#include
void demo1(); //创建多个进程的反例
void demo2(); //利用完全二叉树创建两个子进程
void demo3(); //利用镜像的完全二叉树创建两个子进程
int main(){
//demo1();
//demo2();
//demo3();
return 0;
}
void demo1(){
int i;
for(i = 0;i < 2;i++){
fork();
printf("ppid = %d, pid = %d, i = %d \n",getppid(),getpid(),i);
}
}
void demo2(){
int i;
pid_t pid;
for(i = 0;i < 2; i++){
pid = fork();
if(pid == 0){
break;
}
}
if(i < 2){
sleep(i);
printf("i'm %d child,pid = %u\n",i,getpid());
}
else{
sleep(i);
printf("i'm %d parent,pid = %u\n",i,getpid());
}
}
void demo3(){
int i;
pid_t pid;
for(i = 0;i < 2; i++){
pid = fork();
if(pid != 0){
break;
}
}
if(i > 0){
sleep(i);
printf("i'm %d child,pid = %u\n",i,getpid());
}
else{
sleep(i);
printf("i'm %d parent,pid = %u\n",i,getpid());
}
}
demo1函数分析:
代码:
void demo1(); //创建多个进程的反例
int main(){
demo1();
return 0;
}
void demo1(){
int i;
for(i = 0;i < 2;i++){
fork();
printf("ppid = %d, pid = %d, i = %d \n",getppid(),getpid(),i);
}
sleep(10);
}
运行结果:
demo2函数分析:
代码:
void demo2(); //利用完全二叉树创建两个子进程
int main(){
//demo2();
return 0;
}
void demo2(){
int i;
pid_t pid;
for(i = 0;i < 2; i++){
pid = fork();
if(pid == 0){
break;
}
}
if(i < 2){
sleep(i);
printf("i'm %d child,pid = %u\n",i,getpid());
}
else{
sleep(i);
printf("i'm %d parent,pid = %u\n",i,getpid());
}
}
运行结果:
demo3函数分析:
代码:
void demo3(); //利用镜像的完全二叉树创建两个子进程
int main(){
//demo3();
return 0;
}
void demo3(){
int i;
pid_t pid;
for(i = 0;i < 2; i++){
pid = fork();
if(pid != 0){
break;
}
}
if(i > 0){
sleep(i);
printf("i'm %d child,pid = %u\n",i,getpid());
}
else{
sleep(i);
printf("i'm %d parent,pid = %u\n",i,getpid());
}
}
运行结果: