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,上网查找资料和询问同学得以解决,同时自身能力也有所提高。
在完成第三个实验时,总是说我编译错误,但多次调试查找代码,并没有发现错误,后经资料查找发现需要在编译时加上链接库。