- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
论文名称
课 程 设 计 报 告
课程名称 Linux操作系统课程设计
指导教师 张玲
起止日期 2014-03-01
实验项目 实验二 进程控制
学 院 信息与通信工程学院
专 业 电子信息工程
学生姓名
班级/学号
成 绩
指导老师签字
课程设计概述
本次课设意在利用进程控制相关的系统调用编程进行进程控制实验,观察进程从创建、运行到终止的控制过程,加深对进程概念的理解。
课程设计的目的
本实验的目的是掌握进程的概念,理解进程的创建、执行、等待、终止的过程。熟悉有关进程控制的命令和系统调用,理解Shell的工作原理。
课程设计的内容
进程控制命令
使用进程控制命令ps,kill监视和控制进程的活动
编程部分
用fork,wait,exec系统调用编程实现进程控制;
编写一个简单的shell。
设计原理
进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。
构建的文件构架如图:
2012010948
2012010948
exp2
exp1
exp3
vis
vis2
图1 实验目录树的结构
实验步骤
操作
进程控制命令(在此终端窗口的操作截图见图1)
执行ps命令,查看bash进程的PID:
PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收。
在后台运行一个yes进程:
yes /dev/null
用ps -f命令观察yes进程的pid和ppid,用ps u命令观察yes进程的状态。
yes进程的父进程是哪个进程?通过查看yes程序的PPID可知其父进程为bash
根据命令名搜索特定的进程:
ps -ef | grep yes:
用kill命令杀掉yes进程:
kill 【PID】:
图1 进程控制命令
进程控制系统调用(此部分操作截图见图2、3)
利用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
利用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(/bin/sleep, sleep, 40, NULL);
图2 进程控制系统调用-fork_wait
图2 进程控制系统调用-fork_wait
Mini Shell编程(此部分操作截图见图4、5)
在exp2目录编写一个简单的shell程序—Mini Shell,它接收输入的命令并解释执行。
Linux的命令分为内部命令和外部命令两种。内部命令由Shell程序自己实现,如cd、pwd等,外部命令是位于磁盘上(多数在/bin和/usr/bin目录下)的可执行程序。Mini Shell只实现两个内部命令:pwd和quit(退出),它可执行所有不带选项和参数的外部命令,如date、who、cal、ls等。
(选做1)修改Mini Shell程序,使它可执行只带一个命令选项或参数的命令行,如ls -a、cat file、echo hello等。
用strtok函数将读入的命令行cmd以空格为分隔符拆为两个字符串cmd1和cmd2:
cmd1=strtok(cmd, );
cmd2=strtok(NULL, );
此时的cmd1即为命令名,cmd2即为命令的选项或参数。判断cmd2,若为空则执行系统调用ex
文档评论(0)