Linux程序设计第6章_第1页
Linux程序设计第6章_第2页
Linux程序设计第6章_第3页
Linux程序设计第6章_第4页
Linux程序设计第6章_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式操作系统应用开发--Linux程序设计陈晓雷

第6章

进程控制6.1进程标识6.2进程创建6.3执行一个新程序6.4等待进程完成6.5进程终止与僵死进程6.6

system()函数6.7进程组6.8会晤期6.9控制终端6.10作业控制36.1进程标识进程ID(PID):唯一正整数0-MAXPID-1几个特殊进程:调度进程PID=0,init进程PID=1pid_t类型:int#include<sys/types.h>#include<unistd.h>pid_tgetpid(void);pid_tgetppid(void);6.2进程创建#include<sys/types.h>#include<unistd.h>pid_tfork(void);进程之间的层次关系:父进程、子进程fork()成功返回子进程:0父进程:子进程的PIDfork()失败返回:-1,并置errno例:p6-1.c46.2进程创建子进程克隆父进程继承的特征:UID、GID、EUID、EGID、附加GID会晤期ID和控制终端调整用户ID标志和调整组ID标志当前工作目录和根目录文件创建屏蔽mask信号屏蔽与设置任何打开的文件描述字的执行时关闭标志FD_CLOEXEC环境变量所有相连的共享存储段资源限制56.2进程创建子进程与父进程不同的的特殊属性:子进程有它自己唯一的PID有各自不同的父进程ID子进程具有其父进程的打开文件描述字副本子进程已耗时的各种时间(tms_x)均置为0子进程不继承父进程设置的文件锁子进程不继承父进程设置的定时器,任何悬挂的定时器均被清除父进程的任何悬挂信号在子进程中都被清除,但子进程从父进程继承它的信号屏蔽和信号动作fork()使用的两种情况网络服务fork()exec()执行另一个程序pid_tvfork(void);66.3执行一个新程序加载函数exec()externchar**environintexecl(constchar*path,constchar*arg0,…,(char*)0);intexeclp(constchar*file,constchar*arg0,…,(char*)0);intexecle(constchar*path,constchar*arg0,…,,(char*)0,constchar*envp[]);intexecv(constchar*path,constchar*argv[]);intexecvp(constchar*file,constchar*argv[]);intexecve(constchar*path,constchar*argv[],constchar*envp[]);注意:成功:不返回,失败:-1、errno凡是与进程有关的属性保持不变,与程序映像有关的属性变例:p6-2.c76.4等待进程完成等待子进程的终止和获得子进程的出口状态信息pid_twait(int*stat_loc);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);wait()的返回pid阻塞-1:无子进程,或被信号中断参数:stat_loc终止状态:出口状态、信号数、其他信息相关宏表6-186.4等待进程完成例:p6-3.cp6-4.cwaitpid()参数pid==-1:等待任意子进程,等价wait()pid>0:等待进程ID为pid的子进程pid==0:等待进程组ID与调用进程的进程组ID相同的任意子进程pid<-1:等待进程组ID等于pid绝对值的任意子进程options:控制位串:0、WNOHANG、WUNTRACED例:p6-5.c函数wait3()、wait4()96.5进程终止与僵死进程进程终止方式正常终止main()返回调用exit()调用_exit()—直接返回内核异常终止调用abort()信号中断106.5进程终止与僵死进程进程终止时,内核完成的动作关闭所有打开的文件释放进程的存储空间和其他资源在进程的proc结构中保存资源的使用统计和终止状态将进出状态改变为SZOMB(即僵死状态),并将proc结构置于僵死进程表中使init进程继承终止进程的所有活跃子进程,init成为父进程向父进程发送SIGCHID信号一般需要父进程调用wait()来“收尸”例:p6-6.cp6-7.c116.6system()函数一个进程执行另一个程序的三个步骤派生一个子进程fork()由子进程调用加载类函数exec()等待子进程执行完毕wait()单一调用函数intsystem(constchar*command);三种不同的返回值127:不能启动sh-1:其他错误shell终止状态:成功system()优缺点例:p6-8.c126.7进程组属于shell单条命令的进程称为一个进程组或作业gcc-cfoo.c(gcc、cpp、ccl、as、ld)catmyfile.nr|pic|tbl|troff–ms|lp&单条命令(cctanman.c;cpfile1file2;echodone>newfile)前台进程组、后台进程组(后台命令&)进程组ID—PGIDpid_t进程组组长组长的PID与PGID相同组长可以创建一个进程组、创建组内的进程、以及终止它们进程组的生命期136.7进程组获取和设置进程的进程组IDpid_tgetpgrp(void);intsetpgid(pid_tpid,pid_tpgid);操作的限制内核可以对一个组中所有进程采取一致行动Ctrl-c146.8会晤期会晤期是一至多个进程组的集合每一个进程属于一个会晤期和一个进程组正常情况下,由一次注册产生的所有进程属于同一个会晤期。图6-1会晤期主席:创建会晤期的进程pid_tsetsid(void);--创建一个新的会晤期156.9控制终端控制终端(注册终端)--进程通过控制终端进行输入、输出和控制作业的运行控制终端与会晤期、进程组以及进程之间有如下关系:P166/dev/ttychar*ctermid(char*ptr);可直接读写/dev/tty以避免重定向与终端相连的前台进程组的组IDpid_ttcgetpgrp(intfd);inttcsetpgrp(intfd,pid_tpgrpid);166.10作业控制作业控制指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论