油炸机厂家
免费服务热线

Free service

hotline

010-00000000
油炸机厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

进程控制开发之实验内容

发布时间:2020-06-30 18:53:46 阅读: 来源:油炸机厂家

本文引用地址:实验内容7.4.1编写多进程程序1.实验目的通过编写多进程程序,使读者熟练掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。

2.实验内容该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls-l”指令,另一个子进程在暂停5s之后异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后用非阻塞方式等待另一个子进程的退出,待收集到第二个子进程结束的信息,父进程就返回。

3.实验步骤(1)画出该实验流程图。

该实验流程图如图7.8所示。

图7.8实验7.4.1流程图

(2)实验源代码。

先看一下下面的代码,这个程序能得到我们所希望的结果吗,它的运行会产生几个进程?请读者回忆一下fork()调用的具体过程。

/*multi_proc_wrong.c*/

#includestdio.h>

#includestdlib.h>

#includesys/types.h>

#includeunistd.h>

#includesys/wait.h>

intmain(void)

{

pid_tchild1,child2,child;

/*创建两个子进程*/

child1=fork();

child2=fork();

/*子进程1的出错处理*/

if(child1==-1)

{

printf(Child1forkerror\n);

exit(1);

}

elseif(child1==0)/*在子进程1中调用execlp()函数*/

{

printf(Inchild1:execute'ls-l'\n);

if(execlp(ls,ls,-l,NULL)0)

{

printf(Child1execlperror\n);

}

}

if(child2==-1)/*子进程2的出错处理*/

{

printf(Child2forkerror\n);

exit(1);

}

elseif(child2==0)/*在子进程2中使其暂停5s*/

{

printf(Inchild2:sleepfor5secondsandthenexit\n);

sleep(5);

exit(0);

}

else/*在父进程中等待两个子进程的退出*/

{

printf(Infatherprocess:\n);

child=waitpid(child1,NULL,0);/*阻塞式等待*/

if(child==child1)

{

printf(Getchild1exitcode\n);

}

else

{

printf(Erroroccured!\n);

}

do

{

child=waitpid(child2,NULL,WNOHANG);/*非阻塞式等待*/

if(child==0)

{

printf(Thechild2processhasnotexited!\n);

sleep(1);

}

}while(child==0);

if(child==child2)

{

printf(Getchild2exitcode\n);

}

else

{

printf(Erroroccured!\n);

}

}

exit(0);

}

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

山西订做防静电工作服

滨州定做职业装

制做西装

沈阳订制工作服