Unix C学习笔记11 进程的终止

进程的终止

进程的终止分为两类,正常终止与异常终止

正常终止分为三种情况

正常终止

1.从main函数中返回可令进程终止

2.调用exit函数令进程终止

 谁调谁死,在哪调在哪死

 

遇到exit(0)进程立马结束,后面的return 10,printf都不执行

 

退出处理函数也叫做遗言函数

程序正常结束,会冲刷打开状态的标准IO流,即输出缓冲区的内容到屏幕

程序中只是将doit注册成退出处理函数(atexit将函数地址交给内核),并没有自己调用,是内核调用的

 

void doit(int status,void* abc);status为退出码

on_exit(doit,&num);on_exit将函数的地址与num的地址给内核,进程结束时内核调用doit函数,内核将当前进程退出码与num地址给到doit完成传参

 

传地址给doit2,可以是数组地址,结构体地址。。。doit2就可以通过第二个参数void* arg接收任意类型任意数量个参数

先注册的后调用,后注册的后调用,所以doit2先调用,doit后调用

exit(10);退出码为10,status也可以拿到10 

exit(1000);退出码为1000,给内核,内核将1000给退出处理函数doit2的status,还没有到父进程拿到的时候,程序结束时,内核会将1000存到进程的内存资源里,父进程给子进程收尸时/资源回收时只从内存资源里拿1个字节的退出码

3.调用_exit/_Exit函数令进程终止

 

exit内部会调用_exit

A,关文件描述符

B,将调用进程的所有子进程托付给孤儿院进程收养,给子进程托孤

C,给父进程打招呼,我要死了

D,终止进程,退出码存在它的资源里

 

 

直接调用_exit(status);虽然注册了退出处理函数,但不会执行ABC了

_Exit(status);同理

异常终止

1.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值