进程创建实验报告 下载本文

(计算机学院)

课内实验报告

实验名称: 进程管理-进程调度

专业名称 计算机科学与技术 班 级:

学生姓名:

学号(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 2 3 #include 4 5 int kill(pid_t pid, int sig); 6 7

参数:

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 #include pid_t fork(void); 返回值:

1:负数 出错,没有创建父进程子进程。 2. 0 在子进程中

3 正数 在父进程中,返回子进程PID

7)ps aux|grep process命令功能是什么?并解释结果的含义。 答:显示所有进程信息。

三.方案设计

main() 进入主进程

输入创建子进程个

数 进入for循环 开始创建子进程 选择杀死子进程 四.测试数据及运行结果 选择杀死全部进程