第3次小课.linux进程线程第3次小课.linux进程与线程第3次小课.linux进程与线程第3次小课.linux进程与线程.ppt

第3次小课.linux进程线程第3次小课.linux进程与线程第3次小课.linux进程与线程第3次小课.linux进程与线程.ppt

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

操作系统 华软软件学院软件工程系 P* 第三次小课 Linux进程 与线程 华软软件工程系 创建进程实验课主要内容 本周大课内容回顾 通过实验理解Linux进程家族树、父子进程简单同步的实现 主要内容 第一部分 本周大课 内容回顾 同步与互斥 大课回顾 什么是临界资源?进程同步和互斥的定义? 进程死锁的概念? 用PV原语实现互斥的一般方法?信号量初值? 用PV原语实现同步的一般方法?信号量初值? 第二部分 Linux进程 实验 Linux进程 简单的进程同步 主要内容 实验1 Linux进程家族树 文件名3-1.c:看程序写结果。 #includestdio.h main(){ fork(); printf(“it will be printed twice\n”); } 要求: 增加1个fork()、2个fork()、多个fork()的结果会怎样?并说明原因,找出规律。 在fork()语句后添加如下2条语句,结果将如何? printf(“get the child pid: %d\n”,getpid()); printf(“get the parent pid: %d\n”,getppid()); 3-1.c #includestdio.h main(){ fork(); printf(“it will be”); printf(“get the child pid: %d\n”,getpid()); printf(“get the parent pid: %d\n”,getppid()); } init进程 init进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于UNIX的系统(比如 Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之不可用。 init进程 init进程有两个作用: ① 扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程都会以init作为它们的父进程。快速执行一下“ps –af”或者top或者gnome-system-monitor命令,可以列出当前运行的进程来。 ② 在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。 实验2 父子进程同步实验 文件名3-2.c:实现子进程先输出”child proc”,父进程后输出” parent proc”。 要求 请总结实现简单的父子进程同步的一般方法 3-2.c #includestdio.h #includestdlib.h main(){ int p1; while((p1=fork())==-1); if(p10) { wait(0); printf(parent proc\n); } else { printf(child proc\n); exit(0); printf(“test1\n); } printf(“test2\n); } Linux中父子进程同步 相关系统调用 1)进程终止 void exit(stat); 主要任务:自我终止,将进程状态变为”僵死”状态,等待父进程用wait系统调用来收集。 一般参数可设为0,即exit(0) exit():在执行该函数时,进程会检查文件打开情况,清理I/O缓存,如果缓存中有数据,就会将它们写入相应的文件,这样就防止了文件数据的丢失!然后终止进程。 Linux中父子进程同步 _exit():在执行该函数时,并不清理标准输入输出缓存,而是直接清除内存空间,当然也就把文件缓存中尚未写入文件的数据给销毁了。由此可见,使用exit()函数更加安全。 父进程等待子进程终止 pid_t wait([int *stat_addr,] 0) 一般参数可设为0,即wait(0) 实验3 子进程映像的重新装入 创建一进程child.c,功能是输出”I am a child.”,再创建一个父进程3-3.c加载该子进程 。 要求 理解子进程映像的重新装入。 Linux中子进程映像的重新装入 Linux提供了一组系统调用exec函数,主要功能是将指定的可执行文件加载到指定的进程映像中,覆盖该进程映像中原有的程序。 此类系统调用有exec

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档