Linux进程退出资源销毁
(2022-04-02 18:19:07)
进程可以显式调用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
赠金笔
加载中,请稍候......