课 程 设 计 报 告
课程名称 Linux操作系统课程设计 指导教师 张玲 起止日期 2014-03-01 至 2014-06-13 实验项目 实验二 进程控制
学 院 信息与通信工程学院 专 业 电子信息工程 学生姓名 班级/学号
成 绩 指导老师签字
1. 课程设计概述
本次课设意在利用进程控制相关的系统调用编程进行进程控制实验,观察进程从创建、运行到终止的控制过程,加深对进程概念的理解。
1.1 课程设计的目的
本实验的目的是掌握进程的概念,理解进程的创建、执行、等待、终止的过程。熟悉有关进程控制的命令和系统调用,理解Shell的工作原理。
1.2 课程设计的内容
1) 进程控制命令
? 使用进程控制命令ps,kill监视和控制进程的活动 2) 编程部分
? 用fork,wait,exec系统调用编程实现进程控制; ? 编写一个简单的shell。
1.3 设计原理
进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。 构建的文件构架如图:
2012010948 exp1
exp2
exp3
vis
vis2
图1 实验目录树的结构
2. 实验步骤
2.1 操作
2.1.1
进程控制命令(在此终端窗口的操作截图见图1)
1. 执行ps命令,查看bash进程的PID:
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收。
2. 在后台运行一个yes进程: yes > /dev/null &
3. 用ps -f命令观察yes进程的pid和ppid,用ps u命令观察yes进程的状态。 yes进程的父进程是哪个进程?通过查看yes程序的PPID可知其父进程为bash 4. 根据命令名搜索特定的进程: ps -ef | grep yes:
5. 用kill命令杀掉yes进程: kill 【PID】:
图1 进程控制命令
2.1.2
进程控制系统调用(此部分操作截图见图2、3)
1. 利用fork()和wait()来控制进程的执行:
? 在exp2目录下编写一个程序fork_wait.c。该程序用fork创建了一个子进程,而后子进
程先输出自己的信息,再睡眠10秒后结束。父进程等待子进程,收集到子进程结束信息后输出信息,然后结束。
编译:gcc -o fork_wait fork_wait.c 运行:./fork_wait
? 修改此程序,使父进程先睡眠一段时间,然后再收集(wait)子进程。重新编译并在
后台运行该程序(./fork_wait &),在子进程已终止而父进程尚未收集它时,用ps u观察子进程的僵尸状态。
在父进程分支的开始处调用函数sleep(40)睡眠40秒。用ps u可以看见一个Z 2. 利用exec()置换程序的执行代码文件:
? 在exp2目录下编写一个程序exec_test.c,使子进程执行另一个程序,如echo。 编译:gcc -o exec_test exec_test.c 运行:./exec_test
? 修改程序exec_test.c,使子进程执行一个可持续运行一段时间命令,重新编译并在后台
运行程序(./exec_test &),用ps -f 命令观察子进程执行的命令名CMD。 添加一句sleep 40。即:execl(\
图2 进程控制系统调用-fork_wait