- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 Linux进程 郑谦益、韩京宇 8.1 Linux进程概述 略 8.2 进程的地址空间 Linux内核运行在具有内存管理单元处理器上,每个进程都有独立的虚拟地址空间,空间的大小由地址总线宽度决定 。 (32位机)0-3G是用户虚拟地址空间,将可执行程序映射至该空间,该空间的代码运行在用户态。 3G-4G通常定义为Linux内核虚拟地址空间,将Linux内核映射至该空间,不同进程的内核虚拟地址空间是共享的,内核代码运行在内核态。 8.3 进程的创建与终止 fork函数创建新的子进程时,内核将父进程的用户地址空间的内容拷贝给子进程 父子进程之间拥有各自独立的用户空间,当父进程修改变量的值时,不会影响子进程中的相应变量 8.3 进程的创建与终止 pid_t fork(); 创建子进程 -1 错误返回 在子进程中返回0 在父进程中返回子进程的ID 注意:fork()系统调用有一个不同寻常的性质,它不是每次调用返回一次,而是两次:一次在父进程;一次在子进程。 8.3 进程的创建与终止 int glob = 10; int main(void) { int local; pid_t pid; local = 8; if ((pid = fork()) == 0) { // 子进程 sleep(2); } else { glob++; local--; sleep(10); } printf(pid = %d, glob = %d, localar = %d\n, getpid(), glob, local); exit (0); } 8.3 进程的创建与终止 C程序从main函数处开始运行, 实际上,加载可执行文件后,首先运行的是称为start-up的代码,这部分代码在程序链接为可执行程序时,由链接器器加入,其目的是从内核读取进程运行所需的环境信息。例如,环境变量和命令行参数等,start-up在完成一系列初始化工作后,调用main函数 最后,在执行完进程后,通过调用exit函数结束进程,其流程如图8-5所示。 8.3 进程的创建与终止 在Linux系统中,每个进程都有父进程,当子进程运行结束后,子进程进入僵尸状态,并向父进程发送SIGCHLD信号,通知子进程已经终止。 在该状态下几乎释放了所有的内存资源,不能被重新调度,仅在进程列表中保留一个位置,只保留进程如何终止的一些状态信息,以供回收者使用。 由父进程释放子进程余下的所有资源。但当父进程在子进程之前终止,子进程的父进程将更改为init进程,由init进程负责它的善后处理工作。 8.3 进程的创建与终止 void exit(int status); 终止进程 由系统默认调用 8.3 进程的创建与终止 int atexit(void (* func) (void)) ; 功能:登记终止处理程序 参数: 终止处理函数 成功,则为0,否则,返回非0 参见程序8-8 8.4 加载可执行映像 子进程在创建时,继承了父进程的资源,父子进程可并发运行,它们由同一代码流程控制,具有相似的行为。 如果希望子进程具有自身独立的代码流程,这可通过加载可执行二进制映像文件来实现,内核通过exec系统调用在进程中建立新的运行环境。 8.4 加载可执行映像 自学例子(pp.170-172) 8.5 进程同步控制 当创建一个子进程后,父子进程的执行顺序无法控制,当父子进程同时操作共享资源时,不同的执行次序有可能导致不同的运行结果,从而出现数据的不一致性 。 wait和waitpid函数都用于等待子进程的结束,当进程结束后,进程将释放大部分的资源,只保存结束状态等信息,向父进程发送消息,并进入僵死状态,等待父进程读取子进程的状态信息,释放剩余资源。 8.6 进程环境 实际用户和实际用户组 在Linux系统中,同一个程序可由不同用户运行产生进程,为了反映进程的运行环境,在进程控制块中标识了实际用户和实际用户组。实际用户指的是运行该进程的登录用户;实际用户组则是运行该进程的登录用户所属的主用户组。 8.6 进程环境 有效用户和有效用户组 通常,有效用户等于实际用户,有效用户组等于实际用户组 用户在运行一些特殊程序时,例如,passwd命令,用于修改用户的密码,但普通用户无权运行和修改passwd文件,为了解决这一问题,可让用户临时扮演passwd文件属主用户的角色,这样,才有权修改密码文件,此时,实际用户与有效用户就不同了,实际用户为登录用户,而有效用户为passwd文件的属主用户;同样,可使用户临时扮演其他某用户组中用户的角色,以实现对特定资源的访问。 8.6 进程环境 pid_t getuid(void) 获得当前进程
您可能关注的文档
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch08.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch09.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch10.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch11.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch12.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-28361-4 ch13.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-29896-0 ch02.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-29896-0 ch03.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-29896-0 ch05.ppt
- Access数据库应用基础教程(第三版) 作者 978-7-302-29896-0 ch06.ppt
- GNU_Linux编程 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 郑谦益 第9章.ppt
- GNU_Linux编程 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 郑谦益 第10章.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 附录.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目二.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目六.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目七.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目四.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目五.ppt
- GSK系统数控车工技能训练 作者 胡旭兰 项目一.ppt
- GSK系统数控车加工工艺与技能训练 作者 陈移新 GSK数控车加工工艺与操作训练--模块三.ppt
文档评论(0)