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

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

ID:38522041

大小:102.00 KB

页数:9页

时间:2019-06-14

操作系统B-上机实验-进程_第1页
操作系统B-上机实验-进程_第2页
操作系统B-上机实验-进程_第3页
操作系统B-上机实验-进程_第4页
操作系统B-上机实验-进程_第5页
资源描述:

《操作系统B-上机实验-进程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验二Linux进程实验一、实验内容l创建进程的系统调用fork();l创建进程的系统调用vfork();l执行新程序的系统调用exec();l等待进程结束的系统调用wait()或waitpid()。二、实验目的熟悉进程的系统调用。三、实验环境登陆Linux虚拟机,进入Linuxshell,提示符为$,表示普通用户提示符。四、实验题目A【题目】:创建孙子进程forkgrandchild.c【要求】:在读懂fork.c的基础上,创建forkgrandchild.c(forkgrandchild.c创建在用户名(如wc)目录下的proces

2、s目录下),所创建的forkgrandchild.c可实现创建孙子进程,并显示孙子进程的pid,其父进程的pid,forkgrandchild.c要求可读性好,用户界面友好。【预备知识】:1.Linux进程状态l运行状态:程序正在运行或在运行队列中等待运行。l可中断等待状态:进程正在等待某个事件完成,等待过程可被信号或定时器唤醒。l不可中断等待状态:进程正在等待某个事件完成,不可被信号或定时器唤醒,必须等待事件的发生,才可唤醒。l僵死状态:进程已终止,但进程描述符依然存在,直到父进程调动wait()函数后释放。l停止状态:进程因收到SI

3、GSTOPSIGSTPSIGTINSIGTOU信号后停止运行或该进程正在被跟踪(调式程序时)。2.ps命令lps命令可查看进程的当前状态。l如psaux(相关命令参数自学)l对ps命令结果字符的解释<(高优先级进程)、N(低优先级进程)、L(内存锁页,即页不可被换出内存)、s(该进程为会话首进程)、l(多线程进程)、+(进程位于前台进程组)、R(运行状态)、Z(僵死状态)、D(不可中断等待状态)、S(可中断等待状态)、T(停止状态)。1.fork()函数fork()是创建一个新进程的唯一方法,子进程可以继承其父进程几乎所有的资源。在命令

4、行下使用man2fork可获得该函数的函数声明。fork()有两个返回值。成功调用fork后,当前进程实际上已经分裂为两个进程,一个是原来的父进程,另一个是刚刚创建的子进程。父子进程在调用fork地方分开,一个是父进程调用fork的返回值,返回值为刚刚创建的子进程的pid;另一个是子进程中fork函数的返回值,为0。fork返回两次的前提是进程创建成功,若失败返回为-1。用返回值可区分父子进程。fork之后是父还是子进程先运行是不确定的,这取决于内核所使用的调度算法,一般是交替执行,使进程享有同等执行权。fork.c源代码#includ

5、e#include#includeintmain(void){pid_tpid;printf("processcreationstudy");pid=fork();switch(pid){case0:printf("childprocessisrunning,curpidis%d,parentpidis%d",pid,getppid());break;case-1:printf("processcreationfailed");break;default:pri

6、ntf("parentprocessisrunning,childpidis%d,parentpidis%d",pid,getpid());break;}exit(0);}【问题】:1、解释stdio.h、unistd.h、sys/types.h头文件的作用?2、getpid()、getppid()、fork()的功能是什么?3、写出forkgrandchild.c的源代码。1、stdio.h标准I/O库;unistd.h符号常数;sys/types.h原系统数据类型2、getpid()返回当前进程标识;getppid()返回父进程

7、标识;fork()是创建一个新进程的唯一方法,子进程可以继承其父进程几乎所有的资源。fork()有两个返回值。成功调用fork后,当前进程实际上已经分裂为两个进程,一个是原来的父进程,另一个是刚刚创建的子进程。3、源代码:#include#include#includeintmain(void){pid_tp1,p2;printf("processcreationstudy");p1=fork();switch(p1){case0:{printf("childproce

8、ssisrunning,curp1is%d,parentpidis%d",p1,getppid());p2=fork();switch(p2){case0:printf("grandchildproce

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。