(计算机学院)
课内实验报告
实验名称: 进程管理-进程调度
专业名称 计算机科学与技术 班 级:
学生姓名:
学号(8位) 指导教师: 实验日期:
一. 实验目的及实验环境 1.实验目的
通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。
2.实验环境 (1)硬件
? CPU:Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz ? 内存:8.0GB
? 显示器:NVIDIA GeForce GTX 850M ? 硬盘空间:1.0TB (2)软件
? 虚拟机名称及版本:VM12.0 ? 操作系统名称及版本:Centos6.7 ? 编译器:GCC
二. 实验内容 1、实验前准备工作
学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法,复习C 语言的相关内容。 2、实验内容
根据下发的Linux进程管理实验PPT内容,将实验代码补充完整。并考虑: 先猜想一下这个程序的运行结果。假如运行“./process 20”,输出会是什么样?然后按照注释里的要求把代码补充完整,运行程序。可以多运行一会儿,并在此期间启动、关闭一些其它进程,看process 的输出结果有什么特点,记录下这个结果。开另一个终端窗口,运行“ps aux|grep process”命令,看看process 究竟启动了多少个进程。回到程序执行窗口,按“数字键+回车”尝试杀掉一两个进程,再到另一个窗口看进程状况。按q 退出程序再看进程情况。 3、回答问题
编写、编译、链接、执行实验内容设计中的代码,并回答如下问题: 1)你最初认为运行结果会怎么样? 答:子进程按序号输出。
2)实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。 答:子进程基本按序号输出,但有几个顺序错误,可能是某些子进程执行太快,抢占资源,导致顺序错误。
3)proc_number 这个全局变量在各个子进程里的值相同吗?为什么? 答:相同,因为全局变量是共享资源,所以值相同。
4)kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?
答:执行了2次,第一次是用户自己选择杀死进程的编号,执行后该进程被
杀死,不会出现在主进程中,第二次是杀死本组全部子进程,杀死后程序只剩主进程。
5)使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方式哪种更好一点?
答:exit(0和 return(0) 可以主动退出,主动退出比较好,kill在时,部杀死进程时,可能还有未退出的子进程,所以主动退出好。
6)写出fork()和kill()函数原型,并解释函数的功能和参数的含义? 答:Kill: #include
参数:
pid:可能选择有以下四种
1. pid大于零时,pid是信号欲送往的进程的标识。
2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
4. pid小于-1时,信号将送往以-pid为组标识的进程。
sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。 返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在. 参数:
pid:可能选择有以下四种
1. pid大于零时,pid是信号欲送往的进程的标识。
2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
4. pid小于-1时,信号将送往以-pid为组标识的进程。
sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。
返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在. fork:
#include
1:负数 出错,没有创建父进程子进程。 2. 0 在子进程中
3 正数 在父进程中,返回子进程PID
7)ps aux|grep process命令功能是什么?并解释结果的含义。 答:显示所有进程信息。
三.方案设计
main() 进入主进程
输入创建子进程个
数 进入for循环 开始创建子进程 选择杀死子进程 四.测试数据及运行结果 选择杀死全部进程