Linux课程设计进程控制_第1页
Linux课程设计进程控制_第2页
Linux课程设计进程控制_第3页
Linux课程设计进程控制_第4页
Linux课程设计进程控制_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课课 程程 设设 计计 报报 告告 课程名称课程名称 Linux 操作系统课程设计 指导教师指导教师 张玲 起止日期起止日期 2014 03 01 至 2014 06 13 实验项目实验项目 实验二 进程控制 学学 院院 信息与通信工程学院 专专 业业 电子信息工程 学生姓名学生姓名 班级班级 学号学号 成成 绩绩 指导老师签字指导老师签字 1 课程设计概述课程设计概述 本次课设意在利用进程控制相关的系统调用编程进行进程控制实验 观察进程从创建 运行到 终止的控制过程 加深对进程概念的理解 1 1课程设计的目的课程设计的目的 本实验的目的是掌握进程的概念 理解进程的创建 执行 等待 终止的过程 熟悉有关进程 控制的命令和系统调用 理解 Shell 的工作原理 1 2课程设计的内容课程设计的内容 1 进程控制命令 使用进程控制命令 ps kill 监视和控制进程的活动 2 编程部分 用 fork wait exec 系统调用编程实现进程控制 编写一个简单的 shell 1 3设计原理设计原理 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源 构建的文件构架如图 2012010948 exp2 exp1 exp3 visvis2 图 1 实验目录树的结构 2 实验步骤实验步骤 2 1操作操作 2 1 1进程控制命令 在此终端窗口的操作截图见图进程控制命令 在此终端窗口的操作截图见图 1 1 1 执行 ps 命令 查看 bash 进程的 PID PID 就是是各进程进程的身份标识 程序一运行系统就会自动分配给进程进程一个独一无二的 PID 进程进程 中止后 PID 被系统回收 2 在后台运行一个 yes 进程 yes dev null 图 2 进程控制系统调用 fork wait 图 2 进程控制系统调用 fork wait 2 1 3MiniMini ShellShell 编程编程 此部分操作截图见图此部分操作截图见图 4 4 5 5 1 在 exp2 目录编写一个简单的 shell 程序 Mini Shell 它接收输入的命令并解释执行 Linux 的命令分为内部命令和外部命令两种 内部命令由 Shell 程序自己实现 如 cd pwd 等 外部命令是位于磁盘上 多数在 bin 和 usr bin 目录下 的可执行程序 Mini Shell 只实现两个内部命令 pwd 和 quit 退出 它可执行所有不带选项和参数 的外部命令 如 date who cal ls 等 2 选做 1 修改 Mini Shell 程序 使它可执行只带一个命令选项或参数的命令行 如 ls a cat file echo hello 等 用 strtok 函数将读入的命令行 cmd 以空格为分隔符拆为两个字符串 cmd1 和 cmd2 cmd1 strtok cmd cmd2 strtok NULL 此时的 cmd1 即为命令名 cmd2 即为命令的选项或参数 判断 cmd2 若为空则执行 系统调用 execlp cmd1 cmd1 NULL 否则执行 execlp cmd1 cmd1 cmd2 NULL 3 选做 2 修改 Mini Shell 程序 可做任何你认为可以改进的修改 如界面 提示 处理 输入错误 增强功能等 图 4 Mini Shell 编程 1 图 5 Mini Shell 2 图 6 Mini Shell 3 3 实验结论与评价实验结论与评价 3 1进程控制命令进程控制命令 此部分操作较为简单 主要在帮助理解进程的概念和进程的 PID 掌握基本的进程操作如 ps kill 和后台运行一个程序等 通过这一部分的操作我了解到进程是什么 进程和程序有什么不一 样 子进程和父进程之间的关系 3 2进程控制系统调用进程控制系统调用 fork wait 是本次实验的第一个编程题 通过已经给好的代码我了解到了几个在 Linux 中常用的 函数 如 sleep getpid fork wait 等 我更加清晰地在修改程序的过程中理解了子进程 和父进程的关系 更重要的是我学会了通过简单函数来对进程进行控制 观察到了特殊的僵尸进程 僵尸进程 zombie 是指已终止运行 但尚未被清除的进程 exec test 是本次试验的第二个编程题 这次学习到的函数是 execl 第一参数 path 字符指针 所指向要执行的文件路径 接下来的参数代表执行该文件时传递的参数列表 argv 0 argv 1 最 后一个参数用空指针 NULL 作结束 利用这个函数实现了用 exec 置换程序的执行代码文件的功能 3 3Mini Shell 编程编程 这一部分的操作较为复杂 占用了实验的大部分时间 让我意识到我们的编程能力还有待提高 尤其是字符串 文件等部分 选作一的地方通过空格把命令名和参数分开分别执行 需要分清是应 该先读命令再分开还是先分开再读命令 选作二我增添了几个 Mini Shell 内部命令 修改了界面 4 程序清单程序清单 4 1fork wait c include include include main int rid cid printf fork test by 2012010948 n 将 your sid 改为你的学号 rid fork if rid 0 printf error in fork else if rid 0 子进程 printf I am child my PID is d I will sleep a while n getpid sleep 10 睡眠 10 秒 printf I am down n else 父进程 sleep 30 睡眠 30 秒 cid wait NULL printf I am parent I caught a child with PID of d n cid exit 0 4 2exec test c include include include main int rid printf exec test by 2012010948 n 将 your sid 改为你的学号 rid fork if rid 0 printf error in fork else if rid 0 子进程 printf I am child I will change to echo n execl bin echo echo Hello NULL else wait NULL 父进程 exit 0 4 3mini shell c include include include include void pwd main int id char cmd 80 printf mini shell by your sid n 将 your sid 改为你的学号 while 1 printf Mini Shell 显示命令提示符 fgets cmd 80 stdin 从键盘读入命令行 cmd strlen cmd 1 0 将行尾字符置为字符串结束符 0 if strcmp cmd quit 0 exit 0 内部命令 quit if strcmp cmd pwd 0 pwd 内部命令 pwd else 外部命令 id fork if id 0 printf Fork error n exit 1 if id 0 if execlp cmd cmd NULL 0 printf Command error n exit 2 wait NULL void pwd char dir 50 getcwd dir 50 printf s n dir 4 4mini shell c 选作一选作一 include include include include void pwd main int id char cmd 80 char cmd1 char cmd2 char cmd3 char y printf 2012010948 n 将 your sid 改为你的学号 printf Thank you for using me Do you want any help y n getchar scanf c if y n printf thanks else if y y printf ok while 1 printf Mini Shell 显示命令提示符 fgets cmd 80 stdin 从键盘读入命令行 cmd strlen cmd 1 0 将行尾字符置为字符串结束符 0 cmd1 strtok cmd cmd2 strtok NULL cmd3 strtok NULL if strcmp cmd1 quit 0 exit 0 内部命令 quit if strcmp cmd1 pwd 0 pwd 内部命令 pwd else 外部命令 id fork if id 0 printf Fork error n exit 1 if id 0 if cmd2 NULL if cmd3 NULL if execlp cmd1 cmd1 cmd2 NULL 0 printf Command error n exit 2 else if execlp cmd1 cmd1 cmd2 cmd3 NULL 0 printf Command error n exit 2 else if execlp cmd1 cmd1 NULL 0 printf Command error n exit 2 wait NULL void pwd char dir 50 getcwd dir 50 printf s n dir 4 5mini shell c 选作二选作二 include include include include void pwd main int id char cmd 80 char cmd1 char cmd2 printf n printf mini shell by 2012010948 n 将 your sid 改为你的学号 printf n while 1 printf Mini Shell 显示命令提示符 fgets cmd 80 stdin 从键盘读入命令行 cmd strlen cmd 1 0 将行尾字符置为字符串结束符 0 printf s n cmd cmd1 strtok cmd cmd2 strtok NULL 将命令行分开成两部分 if strcmp cmd quit 0 exit 0 内部命令 quit if strcmp cmd where 0 pwd 内部命令 pwd if strcmp cmd tired 0 sleep 5 printf i m down n 内部命令 pwd else 外部命令 id fork if id 0 printf Fork error n exit 1 if id 0 if cmd2 NULL execlp cmd1 cmd1 NULL else execlp cmd1 cmd1 cmd2 NULL if execlp cmd cmd NULL 0 printf Command erro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论