嵌入式LINUX_C基础10.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式LINUX_C基础10

1.进程管理 1.1 进程的终止 _exit()/_Exit()函数: 功能:立即终止当前正在运行的进程。 格式:#include unistd.h void _exit(int status); #include stdlib.h void _Exit(int status); 注意:_exit()和_Exit()函数功能上完全相同;在终止进程时,会自动关闭属于该进程的文件描述符,会给该进程的父进程发送SIGCHLD信号,该进程的所有子进程会重新认定新的父进程为init; 参数值会被返回给父进程作为该进程终止时的退出状态信息,父进程需要调用wait系列函数来获取该数据。 返回值:无返回值 exit()函数: 功能:引起正常进程的终止。 格式:#include stdlib.h void exit(int status); 注意:将参数status0377之后的数据返回给当前进程的父进程 自动调用所有被atexit()和on_exit()函数注册过的函数,一般用于处理善后工作,然后终止进程。 返回值:无返回值 atexit()函数: 功能:对参数指定的函数进程注册。 格式:#include stdlib.h int atexit(void(*function)(void)); 注意:所有被该函数注册过的函数会在正常终止时被调用(调用exit函数和执行main函数中的return)。 返回值:成功返回0,失败返回非零。 wait()函数 功能:主要用于挂起当前正在调用的进程,直到有一个该进程的子进程终止为止,可用于回收子进程,当有多个子进程时,随机回收一个。 格式:#include sys/types.h #include sys/wait.h pid_t wait(int *status); 注意:参数status指针表示获取子进程的终止状态并放到status这个变量中;如果参数为空时,表示不关心子进程的退出状态;如果参数不为空时,该函数会将进程的状态信息存储在参数指定的int类型空间中,解析该状态需要借助以下带参宏,传递给宏的参数必须是整数自己,而不是指向它的指针: WIFEXITED(*status):如果子进程正常终止(exit()或_exit()或return),则返回true;(wait if exited) WEXITSTATUS(*status):获取子进程的退出码,所谓的退出码就是子进程调用exit/_exit/_Exit函数的参数或者main函数的返回值的低8位,因此传递给这三个函数的参数和main函数的返回值最好不要超过【-128,127】;(wait exit status) WIFSIGNALED(*status):判断子进程是否异常终止;如果是则通过WTERMSIG(status)宏获取导致子进程异常终止的信号。 返回值:成功返回终止的子进程的进程号,失败返回-1。 1.2 父进程在创建若干个子进程后调用wait函数 a.若所有子进程都在运行,则父进程阻塞(可视为睡眠),直到有子进程终止 b.若有一个子进程终止,则返回该子进程的PID并通过status参数(若非空)则输出其终止状态; c.若没有需要等待子进程,则返回-1,置errno为ECHILD(可作为多个子进程全部返回的标志),表示所有子进程回收完毕; d.如果有一个子进程在wait函数被调用之前已经终止,则将处于僵尸状态,此时调用wait函数会立即返回,同时取得该子进程的终止状态并通知父进程回收其资源; 由此可见wait函数主要完成三个任务: A.阻塞父进程的运行,直到子进程终止再继续,停等同步(即等待子进程处理结束); B.获取子进程的PID和终止状态,使父进程了解哪个子进程终止了及其终止原因; C.为子进程收尸,防止大量的僵尸进程存在于内核而耗费系统资源; 1.3 status的使用 … int status;//定义变量以装载子进程退出状态 pid_t pid=wait(status);//阻塞父进程,等待子进程结束; if(-1==pid) { perror(“wait”); exit(EXIT_FAILURE); } if(WIFEXITED(status)) printf(“%d子进程正常终止,退出码%d\n“,pid,WEXITSTATUS(status)); else printf(“%d子进程异常终止,终止信号%d\n”,pid,WTERMSIG(status)); ****使用wait函数及其相关宏回收子进程并判断其退出状态**************

文档评论(0)

有一二三 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档