linux下fork函数创建进程
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> #include<sys/wait.h> int main() { pid_t child1,child2,child; /*创建两个子进程*/ child1=fork(); //child2=fork(); /*子进程1的出错处理*/ if(child1==-1) { printf("Child1 fork error\n"); exit(1); /*异常退出*/ } /*在子进程1中调用execlp()函数*/ if(child1!=0) { child2=fork(); if(child2==-1) { printf("Child2 fork error\n"); exit(1); /*异常退出*/ } /*在子进程2中使其暂停5s*/ else if(child2==0) { printf("I am child2.I will sleep for 5 seconds!\n"); sleep(5); printf("I am child2.I have awaked and I will exit!\n"); exit(0); /*正常退出*/ } /*在父进程中等待两个子进程的退出*/ else { printf("I am father progress\n"); child=waitpid(child1,NULL,0);/*阻塞式等待*/ if(child==child1) { printf("I am father progress.I get child1 exit code:%d\n",child); } else { printf("Error occured!\n"); } do { child=waitpid(child2,NULL,WNOHANG);/*非阻塞式等待*/ if(child==0) { printf("I am father progress.The child2 progress has not exited!\n"); sleep(1); } }while(child==0); if(child==child2) { printf("I am father progress.I get child2 exit code:%d\n",child); } else { printf("Erroe occured!\n"); } } } else if(child1==0) { printf("I am child1 and I execute 'ls -l'\n"); if(execlp("ls","ls","-l",NULL)<0) { printf("Child1 execlp error\n"); } } /*子进程2的出错处理*/ exit(0); }
运行结果: