收藏 分享(赏)

实验二 进程控制.ppt

上传人:无敌 文档编号:1426190 上传时间:2018-07-16 格式:PPT 页数:16 大小:377.50KB
下载 相关 举报
实验二 进程控制.ppt_第1页
第1页 / 共16页
实验二 进程控制.ppt_第2页
第2页 / 共16页
实验二 进程控制.ppt_第3页
第3页 / 共16页
实验二 进程控制.ppt_第4页
第4页 / 共16页
实验二 进程控制.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、操作系统实验指导以Linux系统为主,实验二 Linux的进程管理,一. 实验目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)掌握使用Linux命令管理和操作进程的方法。二. 实验预备知识(1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解。(2)阅读Linux的fork.c源码文件,分析进程的创建过程。,三. 实验内容(1)进程的创建 编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一句话和进程ID,试观察记录屏幕上的显示结果,并分析原因。(2)创

2、建进程扇、进程链和进程树。(3)使用fork-exec组合,用新创建的进程执行一个新的任务。 (4)使用一些Linux命令操作和管理进程。四. 试验总结(1) 写出试验报告。(2) 根据试验结果,绘制出进程扇、进程链和进程树,并分析原因。,进程标识,成员名:pid_t pid功能: 内核通过pid标识每个进程 pid与进程描述符之间有严格的一一对应关系数据类型说明: pid_t实际上是一个int类型 取值范围:0 32767最大值修改:/proc/sys/kernel/pid_max获取进程pid : getpid() sys_getpid(),1.fork( ) 创建一个新进程 int fo

3、rk( )该系统调用是“单调用双返回”。具体为:在子进程中返回0;在父进程中返回子进程id;出错为12. void exit(int status); 无返回 参数0正常结束,1异常结束3. int execl ( char *pathname,char *arg0,char *argn, (char *) 0); 第一个是路径名,后面的是命令行参数,最后以空指针结尾。 返回:若出错为1,成功无返回。4. pid_t wait(int *status); 返回:若成功则为进程ID,若出错为1。,系统调用函数说明、参数值及定义,fork()函数,说明 子进程完全复制父进程的资源 子进程的执行独立

4、于父进程 进程间数据共享需通过专门的通信机制来实现返回值 fork( )函数是一个单调用双返回的函数。由父进程调用,执行成功时,在父进程中返回子进程标识(pid),在子进程中返回0; 用失败返回-1,通过ps命令获取进程信息,2018/7/16,第二章 处理器管理,进程等待,函数原型: pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options);说明: 均通过wait4()系统调用实现 进程终止时,会向父进程发送SIGCHLD信号调用wait( )和waitpid( )的进程的可能状态: 阻塞如果子进程

5、还在运行正常返回 返回子进程的终止状态(其中一个子进程终止)出错返回 没有子进程,进程创建fork()的程序示例(1)#include#include#includemain() pid_t pid; pid=fork(); if(pid= =0) printf(“Hello,Im a child process.n”); elseprintf(“Hello,Im a parent process.n”);exit(0);,编译creat.c并运行:$ gcc creat.c$ ./a.out,Hello,Im a child process.,Hello,Im a parent proces

6、s.,父子进程执行线索,进程创建fork()的程序示例(2),创建进程#include#include#includemain(void) int i, n=5; pid_t pid; for(i=1;i0和0的情况,运行并分析结果。,扇,进程等待示例waittest1.c,exec()函数(),大多情况下子进程从fork返回后都调用exec()函数来执行新的程序进程调用exec()函数时,该进程完全由新程序替代,新程序从main开始执行 exec()并不创建新进程,前后进程ID不变,但用另外一个程序替代当前进程的正文、数据、堆栈等,exec()函数(),函数原型 int execl( con

7、st char *path, const char *arg, .); int execlp( const char *file, const char *arg, .); int execle( const char *path, const char *arg , ., char* const envp); int execv( const char *path, char *const argv ); execve( const char *filename *const argv *constint filename, char , char envp ); int execvp( c

8、onst char *file, char *const argv );,#include #include#include #include#include #include void main( ) pid_t pid; int status; /等待的退出状态 pid=fork( ); if(pid= =-1) perror(“Fork faild to creat a process”); exit(1); else if (pid= =0) if(execl(“/bin/ls”, “ls”, “-l”,NULL)0) perror(“Exec faild”); exit(1); else if(pid!=wait(,fork-exec组合创建新进程、运行新程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报