- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统应用开发--Linux程序设计 陈晓雷 第6章 进程控制 6.1 进程标识 6.2 进程创建 6.3 执行一个新程序 6.4 等待进程完成 6.5 进程终止与僵死进程 6.6 system()函数 6.7 进程组 6.8 会晤期 6.9 控制终端 6.10 作业控制 * 6.1 进程标识 进程ID(PID):唯一正整数0-MAXPID-1 几个特殊进程:调度进程PID=0,init进程PID=1 pid_t类型: int #include sys/types.h #include unistd.h pid_t getpid(void); pid_t getppid(void); 6.2 进程创建 #include sys/types.h #include unistd.h pid_t fork(void); 进程之间的层次关系:父进程、子进程 fork()成功返回 子进程:0 父进程:子进程的PID fork()失败返回:-1,并置errno 例:p6-1.c * 6.2 进程创建 子进程克隆父进程 继承的特征: UID、GID、EUID、EGID、附加GID 会晤期ID和控制终端 调整用户ID标志和调整组ID标志 当前工作目录和根目录 文件创建屏蔽mask 信号屏蔽与设置 任何打开的文件描述字的执行时关闭标志FD_CLOEXEC 环境变量 所有相连的共享存储段 资源限制 * 6.2 进程创建 子进程与父进程不同的的特殊属性: 子进程有它自己唯一的PID 有各自不同的父进程ID 子进程具有其父进程的打开文件描述字副本 子进程已耗时的各种时间(tms_x)均置为0 子进程不继承父进程设置的文件锁 子进程不继承父进程设置的定时器,任何悬挂的定时器均被清除 父进程的任何悬挂信号在子进程中都被清除,但子进程从父进程继承它的信号屏蔽和信号动作 fork()使用的两种情况 网络服务 fork()?exec()执行另一个程序 pid_t vfork(void); * 6.3 执行一个新程序 加载函数exec() extern char **environ int execl(const char *path, const char *arg0, …, (char *)0); int execlp(const char *file, const char *arg0, …, (char *)0); int execle(const char *path,const char *arg0, …,,(char *)0, const char *envp[]); int execv(const char *path, const char *argv[]); int execvp(const char *file, const char *argv[]); int execve(const char *path, const char *argv[], const char *envp[]); 注意:成功:不返回,失败:-1、errno 凡是与进程有关的属性保持不变,与程序映像有关的属性变 例:p6-2.c * 6.4 等待进程完成 等待子进程的终止和获得子进程的出口状态信息 pid_t wait(int *stat_loc); pid_t waitpid(pid_t pid, int *stat_loc, int options); wait()的返回 pid 阻塞 -1:无子进程,或被信号中断 参数:stat_loc 终止状态:出口状态、信号数、其他信息 相关宏 表6-1 * 6.4 等待进程完成 例:p6-3.c p6-4.c waitpid()参数 pid==-1: 等待任意子进程,等价wait() pid0: 等待进程ID为pid的子进程 pid==0:等待进程组ID与调用进程的进程组ID相同的任意子进程 pid-1:等待进程组ID等于pid绝对值的任意子进程 options:控制位串:0、WNOHANG、WUNTRACED 例:p6-5.c 函数wait3()、 wait4() * 6.5 进程终止与僵死进程 进程终止方式 正常终止 main()返回 调用exit() 调用_exit()—直接返回内核 异常终止 调用abort() 信号中断 * 6.5 进程终止与僵死进程 进程终止时,内核完成的动作 关闭所有打开的文件 释放进程的存储空间和其他资源 在进程的proc结构中保存资源的使用统计和终止状态 将进出状态改变为SZOMB(即僵死状态),并将proc结构置于僵死进程表中 使init进程继承终止进程的所有活跃子进程,init成为父进程 向父进程发送SIGCHID信号 一般需要父进程调用wait()来
文档评论(0)