操作系统实验2——进程控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 进程控制
一、实验目的
加深对进程概念的理解,明确进程和程序和区别;进一步认识并发执行的实质;分析进程争用资源的现象。
二、实验内容
1. 熟悉Linux进程控制常用命令。
2. 输入进程创建、控制的程序并调试程序。
三、实验预备知识
1. 进程控制常用命令
(1)ps 命令
功能:查看目前的系统中有哪些进程,以及它们的执行情况。
常用命令格式及功能如下:
ps 查看系统中属于自己的进程
ps au 查看系统中所有用户的进程
ps aux 查看系统中包含系统内部的及所有用户的进程
主要输出列说明:
USER:进程所有者的用户名
PID:进程号
TTY:进程从哪个终端启动
TIME:此进程所消耗的CPU时间
COMMAND:正在执行的命令或进程名称
(2)top 命令
功能:动态显示进程,实时监测进程状态。与ps命令相似,只是top命令在执行后会以指定的时间间隔来刷新显示信息,以使top所显示的进程状态总是当前时刻的。
(3)kill 命令
功能:结束或终止进程。
常用命令格式及功能如下:
kill 5302 杀死PID为5302的进程
kill -9 5302 强行杀死PID为5302的进程
(4)echo $变量名
功能:查看外壳变量的设定值。
例:echo $$ 显示当前进程PID
2.常用系统调用函数
常用系统调用函数、程序的说明、参数及定义如下:
(1)fork()函数
功能:创建一个新进程
函数格式:int fork()
其中返回int取值意义如下:
小于0:创建失败
0: 创建成功,在子进程中返回0值
大于0: 创建成功,在父进程中返回子进程id值
-1:创建失败
(2)wait()函数
功能:父进程等待子进程终止,以便对子进程进行善后处理。
函数格式:int wait(int *statloc)
参数定义:
statloc 指出子进程终止状态码的位置。若不关心子进程的终止状态,可传递一个空指针。
返回值:正常返回时,为终止子进程的PID;错误返回时为-1;其他为0。
3. gcc简介
gcc是C 编译器,用来把某程序的源代码编译成汇编代码。
假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,我们只要在命令行下执行:
gcc -o hello hello.c
-o选项表示要求输出的可执行文件名。
-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。
-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。
如果需要更详尽的内容,可查阅gcc的帮助。
4. 运行程序
./ 代表当前目录
要运行当前目录下的hello程序,我们只要在命令行下输入:
./hello
四、实验的环境与要求
1. 装有Linux操作系统且安装有gcc模块的服务器一台。
2. 在每台学生用计算机的硬盘中存有文件putty.exe。
五、实验步骤
1. 用putty.exe命令登录Linux操作系统。
2. 进程控制命令练习。
(1) 显示当前进程ID。
(2) 列出所有进程。
(3) 动态监视进程状态。
3. 运行进程创建的程序。
(1) 用vi编辑器分别输入以下两个参考程序:
/*程序1:*/
#include
int main()
{ int p1,p2;
while ((p1=fork())==-1);
if (p1==0)
putchar(‘b’);
else
{
while ((p2=fork())==-1);
if (p2==0)
putchar(‘c’);
else putchar(‘a’);
}
return 0;
}
/*程序2*/
#include
int main()
{
int p1,p2,I;
while ((p1=fork())==-1);
if (p1==0)
for (I=0;I<50;I++)
printf(“child %d\n”,I);
else
{
while ((p2=fork())==-1);
if (p2==0)
for (I=0;I<50;I++)
printf(“son%d\n”,I);
else
for (I=0;I<50;I++)
printf(“daughter %d\n”,I);
}
return 0;
}
(2) 调试运行程序。
(3) 记录实验结果并对结果进行思考。
4. 写程序完成如下功能:
(1)从命令行接收整数n;
(2)创建子进程计算长度为n的Fibonacci数列并输出;
(3)父进程等待子进程执行完毕之后输出"Complete!"
【附:The Fibonacci sequence is the series of numbers 0, 1, 1, 2, 3, 5, 8, .... Formally, it can be expressed as:
fib(0) = 0
fib(1) = 1
fib(n) = fib(n-1) + fib(n-2) 】