加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Linux进程退出资源销毁

(2022-04-02 18:19:07)
分类: unix
    进程可以显式调用exit()函数退出,main()函数在return时,编译器自动为其插入exit()。
    exit()函数为libc实现,它做两部分工作:
   (1)用户层面的释构工作,如调用全局变量的释构函数。全局指针指向通过new生成的全局变量不会被释放。
   (2)内核层面的释放工作,通过系统调用_exit()->exit_group(),让进程的所有线程退出。exit_group()对各个线程调用do_exit(),do_exit()对内存,文件,锁,计时器等资源进行释放。

   注意:主线程应该在其它线程退出后才调用exit(),这样避免全局变量被释构后仍然被子线程访问的风险,造成不必要的coredump。一般做法是在main() return前, 调用pthread_join()去等待子线程结束。

  do_exit_group()会依次对线程组内的其它线程发送SIGKILL信号,最后调用do_exit()退出自己。内核层面,不确定各线程销毁顺序。我们更关注的是用户层面上的全局变量不能再使用。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有