- 1、本文档共107页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lecture03processcontrol
* * * * 解释 此程序从终端读入命令并执行之,执行完成后,父进程继续等待从终端读入命令。 另外,有一个更简单的执行其它程序的函数system,它是一个较高层的函数,实际上相当于在SHELL环境下执行一条命令,而exec类函数则是低层的系统调用。 * Memory layout of a Program Historically, a C program has been composed of the following pieces: Text segment:This is the machine instructions that are executed by the CPU. It is shareable. Initialized data segment. It contains variables that are specifically initialized in the program. E.g.: int maxcount = 99; Uninitialized data segment. It is often called the ‘bss’ segment. Data in this segment is initialized by the kernel to 0 or NULL pointer before the program start executing: long sum[1000]; Stack. This is where automatic variable are stored, along with information that is saved each time a function is called. Heap. Dynamic memory allocation takes place on the heap. * Typical memory arrangement Command-line argument and Environment variables stack heap Uninitialized data (bss) Initialized data text initialized to 0 or NULL by exec read from program file by exec High address Low address * exit exit是第1号调用,其在Linux函数库中的原型是 #includestdlib.h void exit(int status); 不像fork那么难理解,从exit的名字就能看出,这个系统调用是用来终止一个进程的。无论在程序中的什么位置,只要执行到exit系统调用,进程就会停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。请看下面的程序: * exit /* exit_test1.c */ #includestdlib.h main() { ???????? printf(this process will exit!\n); ???????? exit(0); ???????? printf(never be displayed!\n); } 编译后运行: $gcc exit_test1.c -o exit_test1 $./exit_test1 this process will exit! * 分析 程序并没有打印后面的never be displayed!\n,因为在此之前,在执行到exit(0)时,进程就已经终止了。 exit 系统调用带有一个整数类型的参数status,我们可以利用这个参数传递进程结束时的状态 比如说,该进程是正常结束的,还是出现某种意外而结束的,一般来说,0表示没有意外的正常结束;其他的数值表示出现了错误,进程非正常结束。 * exit和_exit _exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构; exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为exit已经不能算是纯粹的系统调用。 exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件, “清理I/O缓冲” 。 * 小知识:缓冲区 在Linux 的标准函数库中,有一套称作“高级I/O”的函数,我们熟知的printf()、fopen()、fread()、fwrite()都在此列,它们也被称作“缓冲I/O(buffered
您可能关注的文档
- issue1005may15th,2013p.8campusv.4vibegame.ppt
- issue997mar.21st,2013page4focuspage9career.ppt
- issue1002apr.23rd,2013p.2buzzp.4focus.ppt
- issue1010june20th,2013p.4focusp7culture.ppt
- issue1021sep.12th,2013.ppt
- issue1030nov.13th,2013.ppt
- issue1035december18,2013.ppt
- issue29488forjunior3北京市首师大附中李玉华.ppt
- issue35493forjunior3福建省石狮市中英文实验学校孙丽平.ppt
- issue33491forjunior3山东济南实验初级中学刘俊艳.ppt
文档评论(0)