Pit*_*kos 5 process kernel process-management exit
最近我在一个powerpoint演示文稿中发现了这一点:
当一个程序被编译和链接时,链接器会在程序中插入一些额外的代码。正是这段代码调用主函数的方式与用户调用“下层函数”的方式大致相同。
额外的代码有两个功能:
- 确保 C 程序在正确的环境中运行
- 成功终止后的清理
在此之前,我认为清理是内核的工作。什么是正确的故事?
内核和 C 运行时都做一些工作。
C 运行时所做的一些内核不做的事情:它运行先前注册的处理程序,atexit()
并安排整数返回值 frommain()
返回到系统,就像使用exit()
.
当然,无论用户空间做什么或不做什么,内核最终都会获取所有资源(文件、内存)。