进程创建实验报告_第1页
进程创建实验报告_第2页
进程创建实验报告_第3页
进程创建实验报告_第4页
进程创建实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、 (计算机学院)课内实验报告实验名称: 进程管理-进程调度 专业名称 计算机科学与技术班 级: 学生姓名: 学号(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)软件 &#

2、216; 虚拟机名称及版本:VM12.0Ø 操作系统名称及版本:Centos6.7Ø 编译器:GCC二. 实验内容1、实验前准备工作 学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法,复习C 语言的相关内容。 2、实验内容根据下发的Linux进程管理实验PPT内容,将实验代码补充完整。并考虑:先猜想一下这个程序的运行结果。假如运行“./process 20”,输出会是什么样?然后按照注释里的要求把代码补充完整,运行程序。

3、可以多运行一会儿,并在此期间启动、关闭一些其它进程,看process 的输出结果有什么特点,记录下这个结果。开另一个终端窗口,运行“ps aux|grep process”命令,看看process 究竟启动了多少个进程。回到程序执行窗口,按“数字键+回车”尝试杀掉一两个进程,再到另一个窗口看进程状况。按q 退出程序再看进程情况。3、回答问题编写、编译、链接、执行实验内容设计中的代码,并回答如下问题:1) 你最初认为运行结果会怎么样? 答:子进程按序号输出。2) 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。 答:子进程基本按序号输出,但有几个顺序错误,可能是某些子进程执行太快,抢

4、占资源,导致顺序错误。3) proc_number 这个全局变量在各个子进程里的值相同吗?为什么? 答:相同,因为全局变量是共享资源,所以值相同。4) kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么? 答:执行了2次,第一次是用户自己选择杀死进程的编号,执行后该进程被杀死,不会出现在主进程中,第二次是杀死本组全部子进程,杀死后程序只剩主进程。5) 使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方式哪种更好一点? 答:exit(0和 return(0) 可以主动退出,主动退出比较好,kill在时,部杀死进程时,可能还有未退出的子进程,所以主动退

5、出好。 6) 写出fork()和kill()函数原型,并解释函数的功能和参数的含义?答:Kill: #include <sys/types.h>2 3 #include <signal.h>4 5 int kill(pid_t pid, int sig);6 7 参数: pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. p

6、id等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。4. pid小于-1时,信号将送往以-pid为组标识的进程。sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在. 参数: pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的

7、进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。4. pid小于-1时,信号将送往以-pid为组标识的进程。sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进

8、程或进程组不存在.fork:#include <sys/types.h>#include <unistd.h>pid_t fork(void);返回值:1:负数 出错,没有创建父进程子进程。2. 0 在子进程中3 正数 在父进程中,返回子进程PID 7) ps aux|grep process命令功能是什么?并解释结果的含义。 答:显示所有进程信息。三方案设计 main() 进入主进程 输入创建子进程个数进入for循环开始创建子进程 选择杀死子进程 选择杀死全部进程4 测试数据及运行结果五总结1 实验过程中遇到的问题及解决办法;答:刚开始不会用fork 和 Kill 函

9、数,通过上网查资料得以解决。2 对设计及调试过程的心得体会。答:有时候子进程跑的比父进程快,结果有些混乱。6 附录:源代码(电子版)#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <signal.h>#include <ctype.h>/* 允许建立的子进程个数最大值 */#define MAX_CHILD_NUMBER 10/* 子进程睡眠时间 */#define SLEEP_INTERVAL 2int proc_number=0; /* 子进

10、程的自编号,从0开始 */void do_something();/* 存放每个子进程的id */int main(int argc, char* argv) /* 子进程个数 */ int child_proc_number = MAX_CHILD_NUMBER; int i, ch; pid_t child_pid = 0; pid_t pid10=0; pid_t fpid=getpid();/获取父进程编号 printf("This is root process , its pid is %dn", fpid); if (argc > 1) /* 命令行参数

11、第一个参数表示子进程个数*/ child_proc_number = atoi(argv1); child_proc_number= (child_proc_number > 10) ? 10 : child_proc_number; for (i=0; i<child_proc_number; i+) /* 填写代码,建立child_proc_number个子进程要执行 * * proc_number = i; * * do_something(); * * 父进程把子进程的id保存到pidi */ if(!(child_pid=fork()|child_pid<0) pi

12、di=getpid(); proc_number = i+1; do_something(); break; else pidi=child_pid; /* 让用户选择杀死进程,数字表示杀死该进程,q退出 */ while (ch = getchar() != 'q') if (isdigit(ch) /* 填写代码,向pidch-'0'发信号SIGTERM,杀死该子进程 */ if(pidch-'0'!=0) kill(pidch-'0', SIGTERM); printf("Select a process to kill:n"); getchar(); / 在这里填写代码,杀死本组的所有进程 */ /在父进程中杀死所有进程

温馨提示

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

评论

0/150

提交评论