Linux课程设计进程控制

更新时间:2023-10-27 01:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课 程 设 计 报 告

课程名称 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

图2 进程控制系统调用-fork_wait

2.1.3

Mini Shell编程(此部分操作截图见图4、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程序,可做任何你认为可以改进的修改,如界面、提示、处理输

入错误、增强功能等。

本文来源:https://www.bwwdw.com/article/4mn2.html

Top