资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
嵌入式课程设计
课程名称 嵌入式系统设计与实践
授课学期 年至 年
第 一 学期
学院 XX
专 业 XX
学号 XX
姓名 XX
专 题嵌入式系统设计与实践
任课教师 XX
交稿日期 01月11日
成绩
阅读教师签名
日 期
广西师范大学电子工程学院制
1、 实验目的
经过编写多进程程序, 使读者熟悉掌握 fork( ) 、 exec( ) 、 wait( ) 和 waitpid
( ) 等函数的使用, 进一步理解在 Linux 中多进程编程的步骤。
2、 实验内容
该实验有4个进程, 其中一个为父进程, 其余3个是该父进程创立的子进程, 其中第一个子进程运行”ls -l”指令, 第二个子进程暂停3s后运行”ps -ef”指令, 第三个子进程在暂停7s之后异常退出, 父进程先用阻塞方式等待第一个子进程的结束, 并打印第一个子进程退出信息; 然后再用阻塞方式等待第二个子进程的结束, 并打印第二个子进程退出信息; 最后用非阻塞方式等待第三个子进程的退出, 待收集到第三个子进程结束的信息, 打印第三个子进程退出的信息后, 父进程就返回。
本实验需要打开 1 个虚拟终端运行程序 multie_proc_1657。此时观察这个进程的运行结果。本次实验运行的系统平台是Ubuntu-12.04。
3、 实验步骤
( 1) 使用 visio 软件画出实验流程图;
图 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文件, 并更改权限为可读可写可执行
图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) 打开虚拟终端运行程序 multie_proc_1657;
图 11 运行程序
图 12( 1) 运行结果图 12( 2) 运行结果
图 12( 3) 运行结果
图 12( 4) 运行结果
( 7) 观察终端中显示的输出结果, 并给出详细的解释。
从实验结果来看, 首先父进程先创立三个子进程, 三个子进程分别完成不同的工作任务, 三个子进程创立成功后, 返回值是0, 且生成各自的进程号, 后面经过进程号判断是哪个进程退出了并打印退出信息, 三个子进程几乎是同时创立的, 子进程1执行”ls -l”命令, 子进程2暂停3s 后运行”ps -ef”命令, 子进程3暂停7s之后异常退出。父进程是阻塞方式等待进程1和进程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”。父进程返回。
展开阅读全文