电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

进程控制课件讲解-赖炜

  • 资源ID:88220230       资源大小:219.51KB        全文页数:36页
  • 资源格式: PPT        下载积分:12金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要12金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

进程控制课件讲解-赖炜

进程控制,什么是进程,进程是一个程序的一次执行的过程,同时也是资源分配的最小单元。 程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。 进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程,是程序执行和资源管理的最小单位。,后台进程,用户在Shell提示符处键入命令,执行一个程序的时候,它将启动一个进程。此后该进程接管终端,Shell中不能再有其它命令,直到进程执行完毕,才终端返回Shell并显示用户提示符。这种进程就是前台进程。 如果用户在输入Shell命令时,在命令串后面加入“&”,Shell将不等待进程执行完毕就直接返回,于是就可以同时运行进程和执行Shell操作。这样的进程就是后台进程,后台进程并不接管终端,因此必须是非交互式的。,守护进程,守护进程是与终端无关,常驻后台执行的特殊进程。Linux中最著名的两个守护进程是: sysproc进程。Linux的第一个进程,标识号为0。它能合理地高度系统中运行的进程,负责将进程从硬盘交换区调入内存(换入),或者将进程从内存中调到硬盘交换区(换出)。 init进程。系统初始化进程,标识号为1,是除sysproc外所有进程的祖先。,进程状态,睡眠,调度,唤醒,系统调用 、中断,返回,进程标识,Linux系统中每个进程都有一个唯一的标识号,操作系统采用一个非负整数标识每个进程。 进程启动时,系统为进程分配标识号(进程ID);进程中止后,标识号可以重新使用。但任意时刻,一个标识号只对应一个进程。 函数getpid当前进程ID;函数getppid返回父进程ID,获取进程ID,#include #include #include int main() /*获得当前进程的进程ID和其父进程ID*/ printf(“The PID of this process is %dn“, getpid(); printf(“The PPID of this process is %dn“, getppid(); ,启动进程,手工启动,由用户输入命令直接启动进程。 前台启动是手工启动一个进程的最常用方式。一般地,当用户键入一个命令如“ls -l”时,就已经启动了一个进程,并且是一个前台的进程。 若进程非常耗时,且用户也不急着需要结果,可使用后台启动。后台启动是在命令后加“&”。 调度启动,系统根据用户的设置自行启动进程。 系统需要进行一些比较费时而且占用资源的维护工作,并且这些工作适合在深夜无人值守的时候进行,这时用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统就会自动完成这一切工作。 使用调度启动进程有几个常用的命令,如at命令在指定时刻执行相关进程,cron命令可以自动周期性地执行相关进程,fork函数,在Linux中创建一个子进程的惟一方法是使用fork()函数。 fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。 使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。,fork函数,和以往遇到的函数有一些区别,fork函数看起来执行一次却返回两个值。,创建进程,#include #include #include #include int main(void) pid_t result; int count=0; result = fork(); /通过result的值来判断fork()函数的返回情况,首先进行出错处理 if(result = -1) printf(“Fork errorn“); else if (result = 0) /返回值为0代表子进程 printf(“Im child process!nMy PID is %dn“, getpid(); else /返回值大于0代表父进程 printf(“Im father process!nMy PID is %dn“, getpid(); count+; printf(“the count is:%dn“,count); return result; ,fork函数,fork在英文中是叉子,分叉的意思,在函数fork中,取后面的意思。很形象的表示程序从这里分叉,fork函数创建了子进程。 在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行(其实是cpu分时处理)。 两个进程分别获得其所属fork()的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。,说明,fork()函数使用一次就创建一个进程,所以若把fork()函数放在了if else判断语句中则要小心,不能多次使用fork()函数。 由于fork()完整地复制了父进程的整个地址空间,因此执行速度较慢。为了加快fork()的执行速度,有些UNIX系统设计者创建了vfork()。vfork()也能创建新进程,但它不产生父进程的副本,而是通过允许父子进程可访问相同物理内存从而伪装了对进程地址空间的真实拷贝,当子进程需要改变内存中数据时才复制父进程。这就是著名的“写操作时复制”(copy-on-write)技术。 现在很多嵌入式Linux系统的fork()函数调用都采用vfork()函数的实现方式。,思考,#include #include #include #include int main(void) int i=0; printf(“i son/pa ppid pid fpidn“); for(i=0;i2;i+) pid_t fpid=fork(); if(fpid=0) printf(“%d child %4d %4d %4dn“,i,getppid(),getpid(),fpid); else printf(“%d parent %4d %4d %4dn“,i,getppid(),getpid(),fpid); return 0; ,执行程序,Linux系统提供了exec函数族,用于一个在进程中启动另一个程序执行。 exec函数族可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。exec后面的语句将不执行,系统跳到新进程的main()开始执行。 在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。 这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。 实际上,在Linux中并没有exec()函数,而是有6个以exec开头的函数,它们之间语法有细微差别,exec函数族,环境变量,exec函数族可以默认系统的环境变量,也可以传入指定的环境变量。 上列中,以“e”(environment)结尾的两个函数execle()和execve()就可以在envp中指定当前进程所使用的环境变量。 事实上,这6个函数中真正的系统调用只有execve(),其他5个都是库函数,它们最终都会调用execve()这个系统调用。,执行程序,#include #include #include int main() if (fork() = 0) /*调用execlp()函数,这里相当于调用了“ps -ef“命令*/ if (ret = execlp(“ps“, “ps“, “-ef“, NULL) 0) printf(“Execlp errorn“); ,进程休眠,函数sleep使进程进入休眠状态: 此函数使调用进程被挂起,直到满足以下条件之一: 已经过了seconds所指定的墙上时钟时间 调用进程捕捉到一个信号并从信号处理程序返回,终止进程,程序执行到exit()或_exit()时,进程会无条件地停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。,exit(),_exit(),两种退出函数区别,_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;exit()函数则在调用exit系统之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。 由于在Linux的标准函数库中,有一种被称作“缓冲I/O(buffered I/O)”操作,其特征是对应每一个打开的文件,在内存中都有一片缓冲区。执行读写时仅操作缓冲区,等满足了一定的条件(如达到一定数量或遇到特定字符等),再将缓冲区中的内容一次性写入文件。 这种技术大大增加了文件读写的速度,但也为编程带来了一些麻烦。比如有些数据,可能因为没有满足条件,只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,就一定要使用exit()函数。,exit函数,终止进程,#include #include int main() printf(“Using _exit.n“); printf(“This is the content in buffer”); / 加上回车符之后结果又如何 _exit(0); / 若换成exit(0),结果又如何? ,僵尸进程,在一个进程调用了exit()之后,该进程并不会立刻完全消失,而是留下一个称为僵尸进程(Zombie)的数据结构。 僵尸进程是一种非常特殊的进程,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。,进程同步,系统调用wait可以实现父子进程之间的同步。 wait()函数是用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。 waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。实际上wait()函数只是waitpid()函数的一个特例,在Linux内部实现wait()函数时直接调用的就是waitpid()函数。,wait函数,waitpid函数,守护进程,守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 守护进程常常在系统引导载入时启动,在系统关闭时终止。 在Linux中,系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,当控制终端被关闭时,相应的进程都会自动关闭。 但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才会退出。如果想让某个进程不因为用户、终端或者其他的变化而受到影响,那么就必须把这个进程变成一个守护进程。,实现守护进程基本流程,后台运行,由于守护进程是脱离控制终端的,可以通过托管法实现,即创建子进程,父进程退出。 由于父进程已经先于子进程退出,会造成子进程没有父进程,从而变成一个孤儿进程。在Linux中,每当系统发现一个孤儿进程,就会自动由1号进程(也就是init进程)收养它,这样,原先的子进程就会变成init进程的子进程了。 pid = fork(); if (pid 0) exit(0); /*父进程退出*/ ,独立于终端,进程组是一个或多个进程的集合。会话组是一个或多个进程组的集合。通常,一个会话(sess

注意事项

本文(进程控制课件讲解-赖炜)为本站会员(小**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.