- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[高等教育]嵌入式Linux chap5进程
Task_struct结构的描述: 进程标识 进程状态(State) 进程调度信息和策略 标识号(Identifiers) 进程通信有关的信息(IPC) 进程链接信息(Links) 时间和定时器信息(Times and Timers) 文件系统信息(Files System) 处理器相关的上下文信息 在内核源代码中的定义如下: /usr/src/linux/fs/proc/array.c static const char *task_state_array[] = {??????? R (running),????????? /*? 0 */??????? S (sleeping),???????? /*? 1 */??????? D (disk sleep),?????? /*? 2 */??????? T (stopped),????????? /*? 4 */??????? T (tracing stop),???? /*? 8 */??????? Z (zombie),?????????? /* 16 */??????? X (dead)????????????? /* 32 */}; ?内核 2.6.26 中的新状态定义 #define TASK_KILLABLE #define TASK_STOPPED #define TASK_TRACED (1)分析不可被中断的睡眠进程: 终端1) [root@localhost state]# vi testu.c#include unistd.h void main() {?if (!vfork()) sleep(100);}? [root@localhost state]# gcc testu.c -o testu ./testu 终端2)[root@localhost state]# ps aux|grep testu root 24773 0.0 0.0 1336 224 pts/2 D 15:34 0:00 ./testu root 24840 0.0 0.2 4816 640 pts/3 S 15:36 0:00 grep testu (2)分析进程的可中断睡眠态与运行态 : 此时切换到终端1看pisqrt进程状态,此时为R状态:root????? 3792 99.9? 0.0? 1516? 268 pts/2??? R??? 02:40?? 0:01 ./pisqrt?????root????? 3801? 0.0? 0.0? 3700? 672 pts/1??? S??? 02:40?? 0:00 grep pisqrtroot????? 3791? 1.0? 0.0? 1728? 564 pts/2??? S??? 02:40?? 0:00 strace ./pisqr 之后pisqrt进程进入S状态,因为执行了sleep(10)函数,10秒之后pisqrt再次进入R状态,最终退出。 为了有效的管理系统中的每个进程,需要采用一种高效的数据结构把系统内全部进程组织起来。在需要进程的信息时,可以从该结构中查找到相关进程。Linux的所有进程组成一个双向链表。task_struct中的struct task_struct *next_task, *prev_task; 每个进程只有一个父进程,但可以有0个、1个、2个或多个子进程。 fork函数是分裂创建进程的,这也就是fork(分叉)命名的原因吧。如何理解这个“分裂”呢, 四、Linux进程相关的系统调用 只有execle和execve使用了char *envp[]传递环境变量,其它的4个函数都没有这个参数,这并不意味着它们不传递环境变量,这4个函数将把默认的环境变量不做任何修改地传给被执行的应用程序。而execle和execve会用指定的环境变量去替代默认值。 还有2个以p结尾的函数execlp和execvp,它们和execl与execv的差别很小,除execlp和 execvp之外的4个函数都要求,它们的第1个参数path必须是一个完整的路径,如“/bin/ls”;而execlp和execvp的第1个参数 file可以仅为文件名,如 ls,这两个函数可以自动到环境变量PATH制定的目录里去寻找。 以上函数的本质都是调用在/kernel/process.c文件中实现的系统调用sys_execve来执行一个可执行文件。 系统调用execve的入口sys_execve() 。 waitpid(等待子进程中断或结束) 表头文件? ? ? #includesys/types.h
您可能关注的文档
最近下载
- 电厂 电气维修培训课件.ppt VIP
- 电气设备操作与检修安全课件.ppt VIP
- 2025曲靖供电局及所属县级供电企业项目制用工招聘(55人)笔试备考试题及答案解析.docx VIP
- 雷克萨斯-Lexus RX-产品使用说明书-RX200t-AGL20L-AWTGZC2-RX200tOM_OM48E46C_01-1509-00.pdf VIP
- 基于Glauert法的风力机叶片设计设计说明书论文.docx VIP
- 企业法律知识培训讲座培训课件——房地产法律合规与风险管控(1).pptx VIP
- 2025南方电网保山供电局项目制用工招聘(3人)笔试备考试题及答案解析.docx VIP
- 大学生五四青年课活动策划书范文 - 172校园活动网.doc VIP
- 烹调工艺学全套教学课件.pptx
- 新时达电梯控制系统AS380S随机图纸RH0000741;国标20;非18芯;V1.0.pdf
文档评论(0)