操作系统B-上机实验-进程.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统B-上机实验-进程

实验二 Linux 进程实验 实验内容 创建进程的系统调用fork(); 创建进程的系统调用vfork(); 执行新程序的系统调用exec(); 等待进程结束的系统调用wait()或waitpid()。 实验目的 熟悉进程的系统调用。 实验环境 登陆Linux虚拟机,进入Linux shell, 提示符为 $,表示普通用户提示符。 实验题目 A 【题目】:创建孙子进程forkgrandchild.c 【要求】: 在读懂fork.c的基础上,创建forkgrandchild.c(forkgrandchild.c创建在用户名(如wc)目录下的process目录下),所创建的forkgrandchild.c可实现创建孙子进程,并显示孙子进程的pid,其父进程的pid,forkgrandchild.c要求可读性好,用户界面友好。 【预备知识】: Linux进程状态 运行状态:程序正在运行或在运行队列中等待运行。 可中断等待状态:进程正在等待某个事件完成,等待过程可被信号或定时器唤醒。 不可中断等待状态:进程正在等待某个事件完成,不可被信号或定时器唤醒,必须等待事件的发生,才可唤醒。 僵死状态:进程已终止,但进程描述符依然存在,直到父进程调动wait()函数后释放。 停止状态:进程因收到SIGSTOP SIGSTP SIGTIN SIGTOU信号后停止运行或该进程正在被跟踪(调式程序时)。 ps命令 ps命令可查看进程的当前状态。 如 ps aux(相关命令参数自学) 对ps命令结果字符的解释 <(高优先级进程)、N(低优先级进程)、L(内存锁页,即页不可被换出内存)、s(该进程为会话首进程)、l(多线程进程)、+(进程位于前台进程组)、R(运行状态)、Z(僵死状态)、D(不可中断等待状态)、S(可中断等待状态)、T(停止状态)。 fork()函数 fork()是创建一个新进程的唯一方法,子进程可以继承其父进程几乎所有的资源。在命令行下使用man 2 fork 可获得该函数的函数声明。fork()有两个返回值。成功调用fork后,当前进程实际上已经分裂为两个进程,一个是原来的父进程,另一个是刚刚创建的子进程。父子进程在调用fork地方分开,一个是父进程调用fork的返回值,返回值为刚刚创建的子进程的pid;另一个是子进程中fork函数的返回值,为0。fork返回两次的前提是进程创建成功,若失败返回为-1。用返回值可区分父子进程。 fork之后是父还是子进程先运行是不确定的,这取决于内核所使用的调度算法,一般是交替执行,使进程享有同等执行权。 fork.c 源代码 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; printf("process creation study\n"); pid=fork( ); switch(pid) { case 0 : printf("child process is running,curpid is %d,parentpid is %d\n",pid,getppid()); break; case -1: printf("process creation failed\n"); break; default: printf("parent process is running ,childpid is %d,parentpid is %d\n",pid ,getpid()); break; } exit(0); } 【问题】: 解释stdio.h、unistd.h、sys/types.h头文件的作用? getpid()、getppid()、fork()的功能是什么? 写出forkgrandchild.c的源代码。 B 【题目】:diffork.c的创建 【要求】: 上机实现下面diffork.c的运行,体会fork()和vfork()的区别。 【预备知识】: fork()和vfork()的区别 fork()和vfork()都是调用一次,返回值两次。 fork()创建一子进程时,子进程只是完全复制父进程资源,这样得到的子进程独立于父进程,具有良好的并发性,但开销较大,有时是不需要的,比如fork一个进程后,立即调用exec执行另一个应用程序,那么f

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档