您的位置:首页 > 运维架构 > Linux

linux下fork函数创建进程

2014-01-01 11:51 417 查看

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);

}
运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux fork