"); //-->
1、void exit(int status);
该函数的功能是,使调用本函数的进程正常终止,然后把形参的值status&0377(八进制)返回给父进程,父进程可以通过wait“函数族”来获取这个返回值。
所有通过atexit( )和 on_exit( ) 注册的函数,会被挂在一个链表上,后注册的函数被挂在链表的最前面,当执行本函数exit()时,该链表上的函数会从头一个个的执行一遍(也即,按照注册的相反顺序)。这些注册的函数中如果也调用了atexit( )和 on_exit( ) 注册了一些函数的话,它们也会被执行。注意,如果注册的某个函数不返回(例如调用了强退函数_exit( ),又例如通过信号把自己kill掉),那么链表中该函数后面的那些函数就得不到执行了!尤其注意,标准流的清洗,也将无法被执行,可能造成文件不完整!如果一个函数被注册了N次,那么他将在链表中占据N个位置,被执行N遍。执行这个链表的过程,就类似于C++的析构过程。
形参:可选的值为EXIT_SUCCESS、EXIT_FAILURE。尽量不要用exit(0)、exit(1)等,linux建议使用宏来增强程序的可移植性。
返回值:不返回。
注意:如果注册的函数中调用了exit( )、longjmp( )的话,那么程序会出现不可预知的结果!如果本进程通过execve( )函数更换了实体,那么原先注册好的函数都将被移除。
exit(status)函数执行之后,形参的值会被传递到父进程,这时有3种情况:
① 如果父进程设置了SA_NOCLDWAIT标志,或者 把SIGCHLD信号的处理函数设置为SIG_IGN,那么子进程的返回值被丢弃;② 如果父进程在等待子进程,他将被通知子进程的退出状态;
以上两种情况,子进程都会立即消亡。
③ 如果父进程没有被设置为“忽略子进程的退出值”,这时父进程应当使用wait或者waitpid等待子进程的结束,如果父进程不等待,那么子进程结束之后会变成僵尸进程(只有一个单字节容器保存着子进程的退出值,其他什么都没有)。
如果父进程支持SIGCHLD信号,那么子进程结束后这个信号会被发到父进程。如果父进程设置了SA_NOCLDWAIT标志,那么SIGCHLD信号发或者不发,父进程都不会有任何动作。
如果本进程时一个会话的发起者(领导/头儿),且本进程的控制终端就是该会话的控制终端,那么该控制终端下的进程组中的每一个进程都会收到SIGHUP信号,并且,本进程的终端将会与该会话断开连接,该会话会允许自己被别的控制进程给捕获(连接)。
如果一个进程的退出,导致一个进程组变为孤立进程组,并且,如果该孤立进程组中的任何一个成员stop了,那么该进程组中的每一个进程都会收到两个连续的信号SIGCONT、SIGHUP。关于“孤立进程组”的相关概念,可参考man 2 setpgid命令。
2、 void _exit(int status);
void _Exit(int status);//等价于_exit
立即终止一个进程。任何被本进程打开的文件描述符都会被关闭;any children of the process are inherited by process 1, init,;该进程的父进程会收到SIGCHLD信号。
形参的值会被返回到父进程,该值被当做进程的退出状态,父进程可以通过wait函数族来捕获这个返回值。
注意:
本函数与上面的exit函数的区别是,本函数不会调用atexit( )、on_exit( )注册的函数。本函数是否要清洗标准流、是否要删除tmpfile函数创建的临时文件,这些问题不同平台的_exit函数的实现是不一样的。本函数不会关闭打开文件的描述符(这一点与上面的介绍矛盾,但是官方手册就是写的,我也不懂),这可能会导致未知的延迟,以等待挂起的输出彻底完成。如果你不想让程序发生这种延迟,那么你应该在执行本函数前,使用tcflush函数主动清洗流。在执行本函数时,到底是不是所有被挂起的IO都会被取消,到底哪一个被挂起的IO倍取消,这些问题不同平台的_exit函数的实现是不一样的。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
喜报!湃睿科技荣任人工智能数字孪生工作组副组长单位,共筑产业新生态
Keysight推出光学汽车以太网测试平台
TITAN Haptics推出Drake MF触觉马达,让宽频、紧凑型马达更易集成至各类设备
中国开发了世界上首个晶圆级二维半导体FPGA技术
南芯科技发布毫米波雷达PMIC,构建完整一体化感知方案
STC单片机ISP下载编程软件V3.1
STK4121-2功放电路
我在参与一个SDH子速率系统的设计和开发,以前也参与过SDH/STM-1的系统设计,希望大家一起讨论。
SST89E554RC SST89V554RC SST89E564RD SST89V564RD 单片机
LMV1012-07/15/25高增益话筒放大器
第四代示波器创新、卓越与价值 (上)
第四代示波器创新、卓越与价值 (下)
伴芯科技重磅亮相!AI智能体重构EDA,迈向芯片自主设计闭环
华为相关公司推动中国芯片在材料、光刻胶和EDA领域的构建
湃睿科技受邀参加第8届中国精准医疗大会共探“AI+精准医疗”创新发展
SP0SN001 64键音乐ic
中国陕西8英寸硅光子学平台正式上线
AI驱动天线设计推动全球物联网增长
第四代示波器创新、卓越与价值 (中)
JTAG问题!
打造自有知识产权的IETM平台
SST89C54_SST89C58 单片机
LED信号放大电路
谁在撒谎——直面增长又下滑
PC产业已跌无可跌 AMD /英特尔季报均未达预期
嵌入式技术及学习方法 (上)
STK4131-2功放电路
分立元件制作的耳聋助听器
发展我国移动通信的见解
SST89E_V564_554RD_RC FLASHFLEX51 的MCU