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

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

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

当程序被编译和链接时,链接器会在程序中插入一些额外的代码。正是这段代码调用了主要的功能与用户调用“较低功能”的方式大致相同。

额外的代码有两个功能:

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

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

答案1

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

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

当然,最终内核将获得所有资源(文件、内存),无论用户态做什么或不做什么。

相关内容