嵌入式课程设计
课程名称 嵌入式系统设计与实践
授课学期 2016 学年至 2017 学年
第学期
学院 XX
专 业 XX
学
姓号 XX 名 XX
专 题嵌入式系统设计与实践
任课教师 XX
交稿日期 2017年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 实验流程图
1
(2)使用 visio 软件画出父进程繁衍子进程的流程图;
(3)启动虚拟机中的Linux 操作系统,使用root 用户登录系统,使用图形界面模式。打开终端,新建一个以自己的学号建立的用户名(以下简称为student1657)。
图3 添加用户student1657
(4)在/home/student1657目录下创建名为2016011657的文件夹。创建一个权限可读写的 multie_proc_1657.c 文件;
2
a. 创建2016011657文件夹。
图4 创建学号文件夹
b. 创建multie_proc_1657.c文件,并更改权限为可读可写可执行
图5(1) 创建C文件和更改权限
原先是修改为可读可写可执行,后期按要求再次修改权限为可读可写
图5(2) 按要求修改的权限
3
c. 编写multie_proc_1657.c程序
图6 编写程序
(5)以 vi 作为编辑器,编写关于上述程序的 Makefile 文件,编写完后通过make 工具编译生成 1 个名为 multie_proc_1657 的目标文件;
a. 创建Makefile文件
图7 创建Makefile文件
b. 编写生成Makefile文件
图8 编写Makefile文件
4
图9 查看Makefile文件
c. 执行make 命令
图 10 执行make 命令
(6)打开虚拟终端运行程序 multie_proc_1657;
图 11 运行程序
图 12(1) 运行结果
5
图 12(2) 运行结果
图 12(3) 运行结果
6
图 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”。父进程返回。
7
http://www.99jianzhu.com/包含内容:PDF/word/ppt 流程,表格,案例,最新作文 数学 英语 考试题库等内容免费下载。