操作系统实验一 Linux基本环境及进程管理
}
}
三、运行结果
执行命令ls -l ,列出当前目录下所有文件和子目录;
ls completed!
四、分析原因
程序在调用fork( )建立一个子进程后,马上调用wait( ),使父进程在子进程结束之前,一直处于睡眠状态。子进程用exec( )装入命令ls ,exec( )后,子进程的代码被ls的代码取代,这时子进程的PC指向ls的第1条语句,开始执行ls的命令代码。
注意在这里wait( )给我们提供了一种实现进程同步的简单方法。
五、思考
(1)可执行文件加载时进行了哪些处理?
(2)什么是进程同步?wait( )是如何实现进程同步的?
4.编制一段程序,使其实现进程的软中断通信。
要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child process 1 is killed by parent!
Child process 2 is killed by parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent process is killed!
实验指导
一、信号
1 、信号的基本概念
每个信号都对应一个正整数常量 ( 称为 signal number, 即信号编号。定义在系统头文件 <signal.h> 中 ) , 代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知某进程发生了某异常事件。每个进程在运行时,都要通过信号机制来检查是否有信号到达。若有, 便中断正在执行的程序,转向与该信号相对应的处理程序,以完成对该事件的处理;处理结束后再返回到原来的断点继续执行。实质上,信号机制是对中断机制的一 种模拟,故在早期的 UNIX 版本中又把它称为软中断。

