Linux的进程线程

  • 格式:doc
  • 大小:369.00 KB
  • 文档页数:10

北京林业大学
2012学年—2013学年第二学期 Linux应用实验任务书
专业名称:信息管理与信息系统班级:
姓名:学号:
实验题目:实验五 Linux的进程/线程
实验环境: Red Hat Linux 9 实验目的:
通过编写多进程程序,熟练掌握fork、exec、wait、waitpid等函数的使用,进一步理解Linux多进程编程。

通过编写经典的“生产者消费者”问题的实验,可以进一步熟悉Linux 多线程编程,并且掌握用信号量处理线程间的同步互斥问题。

实验内容:
1)有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s之后异常退出,父进程并不阻塞自己,并等待子进程的退出信息,待收集到该信息,父进程就返回。

编写程序:
运行结果:
其中最后一行的Get child2是在上面结果出现5秒后出现的2)
将上述程序编译运行,并观察(注意父子进程关系),特别是在第二个进程退出后,第3,4两个进程。

必要的话,可以加大各个子进程的睡眠时间。

编写程序:
编译运行:每隔一段时间会进行一个子进程的运行,从而产生多个结果。

3)“生产者/消费者”问题描述:有一个有限缓冲区和两个线程:生产者和消费者。

他们分别把产品放入缓冲区和从缓冲区中拿走产品。

当一个生产者在缓冲区满时必须等待,当一个消费者在缓冲区空时也必须等待。

struct msg {
struct msg *next;
int num; };
试用信号量(Semaphore)改写。

编写代码:
运行结果:
遇到的问题及解决方案:
这次的实验对我来说比较困难,因为涉及到编程,所以做起来有些吃力。

但是通过这几个实验,我对进程和线程等问题和相关的一些函数有了更加深刻的了解,对这方面的编程问题也有了一定的提高。

虽然在实验完成过程中有很多困难,但通过查看老师PPT,上网查找资料和询问同学得以解决,同时自身能力也有所提高。

在完成第三个实验时,总是说我编译错误,但多次调试查找代码,并没有发现错误,后经资料查找发现需要在编译时加上链接库。