是在终止时自行清理的进程还是内核?

Pit*_*kos 5 process kernel process-management exit

最近我在一个powerpoint演示文稿中发现了这一点:

当一个程序被编译和链接时,链接器会在程序中插入一些额外的代码。正是这段代码调用函数的方式与用户调用“下层函数”的方式大致相同。

额外的代码有两个功能:

  • 确保 C 程序在正确的环境中运行
  • 成功终止后的清理

在此之前,我认为清理是内核的工作。什么是正确的故事?

Cel*_*ada 9

内核和 C 运行时都做一些工作。

C 运行时所做的一些内核不做的事情:它运行先前注册的处理程序,atexit()并安排整数返回值 frommain()返回到系统,就像使用exit().

当然,无论用户空间做什么或不做什么,内核最终都会获取所有资源(文件、内存)。