- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 影院TMS管理系统安装环境要求.docx
- 强化76---矩阵.doc
- 强化78---矩阵.doc
- 循环水排水沟渗漏修补措施.doc
- 必修1第四章第四节自然灾害对人类的危害.doc
- 必修2第四章课时作业18海水资源的开发利用.doc
- 必修一第二章检测题.doc
- 庞家堡铁矿床.docx
- 必修一模块综合练习(二).doc
- 必修一-含硫化合物的性质与应用.docx
- 2024届云南省玉溪市江川县高三下学期第五次调研考试化学试题含解析.doc
- 2024年春国开(河南)《书法鉴赏》形考任务1-3+终考题库.docx
- 2024年春国开(贵州)《婚姻家庭法学》形考任务1-2及终考任务题库.docx
- 2024届四川省凉山高考化学必刷试卷含解析.doc
- 2024届四川省普通高中高考仿真卷化学试题含解析.doc
- 2024届四川省彭州市彭州中学高考仿真卷化学试题含解析.doc
- 2024届四川省广元外国语学校高考冲刺化学模拟试题含解析.doc
- 2024届云南省泸西县第一中学高三3月份第一次模拟考试化学试卷含解析.doc
- 2024届云南省曲靖市重点中学高三第三次测评化学试卷含解析.doc
- 2024届云南省宣威五中高三第二次联考化学试卷含解析.doc
文档评论(0)