Linux进程管理-实验报告.pdf
《Linux操作系统设计实践》实验一:进程管理
实验目的:
(1)加深对进程概念的理解,明确进程和程序的区别.
(2)进一步认识并发执行的实质。
(3)学习通过进程执行新的目标程序的方法.
(4)了解Linux系统中进程信号处理的基本原理。
实验环境:RedHatLinux
实验内容:(1)进程的创建
编写一段程序,使用系统调用fork()创建两个子进程,当此进程运
行时,在系统中有一个父进程和两个子进程活动,让每一个进程在
屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符
“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因。
程序代码:
#include〈stdio。h〉
intmain()
{
intp1,p2;
while((p1=fork())==—1);
if(p1==0)
putchar(’b’);
else
{
while((p2=fork())==-1);
if(p2==0)
putchar(’c’);
else
putchar(a’);
}
return0;
}
运行结果:bca
分析:第一个while里调用fork()函数一次,返回两次.子进程P1
得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正
整数);接下来父进程和子进程P1两个分支运行,判断P1==0,子进
程P1符合条件,输出“b”;接下来else里面的while里再调用fork()
函数一次,子进程P2得到的返回值是0,父进程得到的返回值是新
子进程的进程ID(正整数);接下来判断P2==0,子进程P2符合条
件,输出“c”,接下来父进程输出“a”,程序结束.
(2)进程的控制
①修改已编写的程序,将每个进程输出一个字符改为每个进程输出
一句话,在观察程序执行时屏幕上出现的现象,并分析原因.
程序代码:
#include〈stdio。h〉
intmain()
{
intp1,p2;
while((p1=fork())==-1);
if(p1==0)
printf(”Child1isrunning!”Child1isrunning!n”);
else
{
while((p2=fork())==—1);
if(p2==0)
printf(”Child2isrunning!!
elseelse
!!
}
return0;
}
运行结果:Child1isrunning!
Child2isrunning!
Fatherisrunning!
分析:本实验和上一个实验一样,只是将每个进程输出一个字符改为
每个进程输出一句话。第一个while里调用fork()函数一次,返回两
次。子进程P1得到的返回值是0,父进程得到的返回值是新子进程
的进程ID(正整数);接下来父进程和子进程P1两个分支运行,
判断P1==0,子进程P1符合条件,输出“Child1isrunning!!;接
下