word
文档
可自由复制编?/p>
实验?/p>
编写多进程程?/p>
1
.实验目?/p>
通过编写多进程程序,使读者熟练掌?/p>
fork()
?/p>
exec()
?/p>
wait()
?/p>
waitpid()
等函数的使用,进一步理?/p>
?/p>
Linux
中多进程编程的步骤?/p>
2
.实验内?/p>
该实验有
3
个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行
?/p>
ls
-
l?/p>
指令,另一个子进程在暂?/p>
5s
之后异常退出,父进程先用阻塞方式等待第一个子进程的结束,然后?/p>
非阻塞方式等待另一个子进程的退出,待收集到第二个子进程结束的信息,父进程就返回?/p>
3
.实验步?/p>
?/p>
1
)画出该实验流程?/p>
该实验流程图如图所示?/p>
?/p>
实验
7.1
流程?/p>
?/p>
2
)实验源代码?/p>
multi_proc.c
?/p>
先看一下下面的代码,这个程序能得到我们所希望的结果吗,它的运行会产生几个进程?请读者回
忆一?/p>
fork()
调用的具体过程?/p>
答:会产生四个进?/p>
/* multi_proc_wrong.c */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
pid_t child1, child2, child;
/*
创建两个子进?/p>
*/
child1 = fork();
child2 = fork();
/*
子进?/p>
1
的出错处?/p>
*/
if (child1 == -1)
{
printf("Child1 fork error\n");
exit(1);
}
else if (child1 == 0) /*
在子进程
1
中调?/p>
execlp()
函数
*/
{
printf("In child1: execute 'ls -l'\n");
if (execlp("ls", "ls","-l", NULL)<0)
{