- 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_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函数及其相关宏回收子进程并判断其退出状态**************
您可能关注的文档
- 山西省八所重点中学2016届高三第二次适应性考试数学试题(通用解析版).doc
- 山西省八校2016届高三上学期期末联考物理试题.doc
- 山西省右玉一中2015-2016学年高二上学期12月月考地理(文)试题+Word版含答案.doc
- 山西省大同市一中2015-2016学年高一上学期期中地理试卷.doc
- 山西省太原市2008-2009学年高三年级调研考.doc
- 山西省太原市2008-2009学年高三年级调研考试.doc
- 山西省太谷县第五中学2015年中考物理专题复习 电能课件 新人教版.ppt
- 山西省屯留一中2014-2015学年高一下学期期中考试物理试卷.doc
- 山西省山西大学附属中学2015-2016学年高二地理2月模块诊断考试试题.doc
- 山西省左权职中人教版物理选修3-4+137+全反射+课件(共25张PPT).ppt
原创力文档


文档评论(0)