我正在编写一个简单的 shell 作为操作系统课程作业,我需要在 PATH 中搜索以查找用户输入的程序,一旦找到正确的目录,我就会分配一块内存,足以容纳目录名加上程序名称,我将其作为第一个参数传递给 execv()。
我可以静态分配 100 个左右的字符,但有限制让我感到不舒服。那么当execv()执行时,堆是被清理了还是那块内存丢失了?
也许记忆不多,但我只是好奇。
当你exec()
,整个进程(a)结束,因此所有资源,包括动态内存和下面的一些fd,都被操作系统回收,并且(b)替换:代码,数据,线程,...
重新文件描述符,来自"man execve"
:
在调用进程映像中打开的文件描述符在新进程中保持打开状态
进程映像,设置了 close-on-exec 标志的进程映像除外
(参见 close(2) 和 fcntl(2))。保持打开状态的描述符不受影响
通过execve()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)