1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。嵌入式课程设计课程名称 嵌入式系统设计与实践 授课学期 年至 年 第 一 学期学院 XX 专 业 XX 学号 XX 姓名 XX 专 题嵌入式系统设计与实践 任课教师 XX 交稿日期 01月11日 成绩 阅读教师签名 日 期 广西师范大学电子工程学院制1、 实验目的经过编写多进程程序, 使读者熟悉掌握 fork( ) 、 exec( ) 、 wait( ) 和 waitpid( ) 等函数的使用, 进一步理解在 Linux 中多进程编程的步骤。2、 实验内容该实验有4个进程, 其中一个为父进程, 其余3个是该父进程创立的子进程, 其中第一
2、个子进程运行”ls -l”指令, 第二个子进程暂停3s后运行”ps -ef”指令, 第三个子进程在暂停7s之后异常退出, 父进程先用阻塞方式等待第一个子进程的结束, 并打印第一个子进程退出信息; 然后再用阻塞方式等待第二个子进程的结束, 并打印第二个子进程退出信息; 最后用非阻塞方式等待第三个子进程的退出, 待收集到第三个子进程结束的信息, 打印第三个子进程退出的信息后, 父进程就返回。本实验需要打开 1 个虚拟终端运行程序 multie_proc_1657。此时观察这个进程的运行结果。本次实验运行的系统平台是Ubuntu-12.04。3、 实验步骤( 1) 使用 visio 软件画出实验流程
3、图; 图 1 实验流程图( 2) 使用 visio 软件画出父进程繁衍子进程的流程图; 图2 繁衍子进程流程图( 3) 启动虚拟机中的Linux 操作系统, 使用root 用户登录系统, 使用图形界面模式。打开终端, 新建一个以自己的学号建立的用户名( 以下简称为student1657) 。 图3 添加用户student1657( 4) 在/home/student1657目录下创立名为 011657的文件夹。创立一个权限可读写的 multie_proc_1657.c 文件; a. 创立 011657文件夹。图4 创立学号文件夹b. 创立multie_proc_1657.c文件, 并更改权限为
4、可读可写可执行图5( 1) 创立C文件和更改权限原先是修改为可读可写可执行, 后期按要求再次修改权限为可读可写图5( 2) 按要求修改的权限c. 编写multie_proc_1657.c程序图6 编写程序( 5) 以 vi 作为编辑器, 编写关于上述程序的 Makefile 文件, 编写完后经过make 工具编译生成 1 个名为 multie_proc_1657 的目标文件; a. 创立Makefile文件图7 创立Makefile文件b. 编写生成Makefile文件图8 编写Makefile文件图9 查看Makefile文件c. 执行make 命令图 10 执行make 命令( 6) 打开
5、虚拟终端运行程序 multie_proc_1657; 图 11 运行程序图 12( 1) 运行结果图 12( 2) 运行结果 图 12( 3) 运行结果图 12( 4) 运行结果( 7) 观察终端中显示的输出结果, 并给出详细的解释。从实验结果来看, 首先父进程先创立三个子进程, 三个子进程分别完成不同的工作任务, 三个子进程创立成功后, 返回值是0, 且生成各自的进程号, 后面经过进程号判断是哪个进程退出了并打印退出信息, 三个子进程几乎是同时创立的, 子进程1执行”ls -l”命令, 子进程2暂停3s 后运行”ps -ef”命令, 子进程3暂停7s之后异常退出。父进程是阻塞方式等待进程1和
6、进程2的, 当子进程1正常运行结束返回值是子进程1的进程号, 由此”child = child1”, 打印子进程1退出信息”get child1 exit code”。同理, 子进程2在正常运行结束返回值是子进程2的进程号, 由此”child = child2”, 打印子进程2退出信息”get child2 exit code”。另外, 父进程是以非阻塞方式等待子进程3结束的, 返回值是0, 由此”child = 0”, 打印”the child3 process has not exited!”, 这里设置了每1秒看子进程3是否结束, 子进程3是暂停7秒后异常退出, 结果是打印了4次”the child3 process has not exited!”, 原因是三个子进程几乎是同时创立的, 在子进程2中已经暂停 3s, 剩下4秒, 每一秒打印一次”the child3 process has not exited!”。子进程3在运行结束返回值是子进程3的进程号, 由此”child = child3”, 打印子进程3退出信息”get child3 exit code”。父进程返回。