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

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

ID:48534774

大小:712.50 KB

页数:21页

时间:2020-01-23

第3次小课.Linux进程与线程.ppt_第1页
第3次小课.Linux进程与线程.ppt_第2页
第3次小课.Linux进程与线程.ppt_第3页
第3次小课.Linux进程与线程.ppt_第4页
第3次小课.Linux进程与线程.ppt_第5页
资源描述:

《第3次小课.Linux进程与线程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第三次小课Linux进程与线程华软软件工程系创建进程实验课主要内容本周大课内容回顾通过实验理解Linux进程家族树、父子进程简单同步的实现主要内容第一部分本周大课内容回顾同步与互斥大课回顾什么是临界资源?进程同步和互斥的定义?进程死锁的概念?用PV原语实现互斥的一般方法?信号量初值?用PV原语实现同步的一般方法?信号量初值?第二部分Linux进程实验Linux进程简单的进程同步主要内容实验1Linux进程家族树文件名3-1.c:看程序写结果。#includemain(){fork();printf(“itwillbeprintedtwice”);

2、}要求:增加1个fork()、2个fork()、多个fork()的结果会怎样?并说明原因,找出规律。在fork()语句后添加如下2条语句,结果将如何?printf(“getthechildpid:%d”,getpid());printf(“gettheparentpid:%d”,getppid());3-1.c#includemain(){fork();printf(“itwillbe”);printf(“getthechildpid:%d”,getpid());printf(“gettheparentpid:%d”,getppid(

3、));}init进程init进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于UNIX的系统(比如Linux)中,它都是第一个运行的进程,所以init进程的编号(ProcessID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之不可用。init进程init进程有两个作用:①扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现

4、必须以init为参照的情况。此时那些失去了父进程的子进程都会以init作为它们的父进程。快速执行一下“ps–af”或者top或者gnome-system-monitor命令,可以列出当前运行的进程来。②在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。实验2父子进程同步实验文件名3-2.c:实现子进程先输出”childproc”,父进程后输出”parentproc”。要求请总结实现简单的父子进程同步的一般方法3-2.c#include#includemain(){intp1;while((p

5、1=fork())==-1);if(p1>0){wait(0);printf("parentproc");}else{printf("childproc");exit(0);printf(“test1");}printf(“test2");}Linux中父子进程同步相关系统调用1)进程终止voidexit(stat);主要任务:自我终止,将进程状态变为”僵死”状态,等待父进程用wait系统调用来收集。一般参数可设为0,即exit(0)exit():在执行该函数时,进程会检查文件打开情况,清理I/O缓存,如果缓存中有数据,就会将它们写入相应的文件,这样就

6、防止了文件数据的丢失!然后终止进程。Linux中父子进程同步_exit():在执行该函数时,并不清理标准输入输出缓存,而是直接清除内存空间,当然也就把文件缓存中尚未写入文件的数据给销毁了。由此可见,使用exit()函数更加安全。父进程等待子进程终止pid_twait([int*stat_addr,]0)一般参数可设为0,即wait(0)实验3子进程映像的重新装入创建一进程child.c,功能是输出”Iamachild.”,再创建一个父进程3-3.c加载该子进程。要求理解子进程映像的重新装入。Linux中子进程映像的重新装入Linux提供了一组系统调用exec函数,主要

7、功能是将指定的可执行文件加载到指定的进程映像中,覆盖该进程映像中原有的程序。此类系统调用有execl()、execle()、execlp()、execv()、execve()、execvp()本课只介绍execl()和execv()execl(“路径名/文件名”,0)execv(file,argv)参数定义:char*file指向文件全名(路径名/文件名)的指针;char*argv[n]指向命令及参数的指针。加载成功则直接执行,不返回;不成功返回-1Child.c#include#includemain(){pr

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

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

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