调用execv()时动态分配的内存会发生什么?

sxu*_*sxu 8 c linux operating-system

我正在编写一个简单的shell作为OS课程分配,我需要在PATH中搜索找到用户输入的程序,一旦找到正确的目录,我malloc一块内存就足以保存目录名加上程序名,我将它作为execv()的第一个参数传递给我.

我可以静态分配100个字符左右,但有限制让我觉得不舒服.所以当execv()执行时,堆清理了还是那段内存丢失了?

这可能不是很多记忆,但我只是好奇.

use*_*421 8

当你exec(),整个过程是(a)结束,所以所有资源,包括动态内存和一些fd如下,由操作系统回收,并且(b)替换:代码,数据,线程,......

重新文件描述符,来自"man execve":

在调用过程映像中打开的文件描述符在新过程映像中保持打开状态,但设置了close-on-exec标志的文件描述符除外(请参阅close(2)和fcntl(2)).保持打开的描述符不受execve()的影响.

  • 也许这是显而易见的,但这只适用于成功的执行官.如果不成功,原始进程将继续使用仍分配的动态分配的内存. (3认同)
  • @DavidRTribble由于它是一个系统调用,``exec()`参数被复制到内核空间.在这方面,'exec()`没什么特别之处. (3认同)