forkpty()和execl()上子进程的堆内存管理

Heap memory management of child process upon forkpty() and execl()?

本文关键字:内存 管理 execl forkpty 子进程      更新时间:2023-10-16

我在Linux中开发了一个c++应用程序。我正在分配一些动态内存,并最终调用forkpty()。子进程正在调用execl(),正如我们所知,如果执行命令成功,execl()永远不会返回。此外,正如我们所知,forkpty()会复制所有父节点的数据。因此,如果child()进程从未将控制权返回给我的应用程序,以便最终进行内存清理,那么在从子进程调用execl()时最好不要分配任何动态内存,这是否安全?我不敢相信我在这里找不到这个…

分配的内存是进程映像的一部分;当你打来电话execl,整个进程映像被替换,并且它只是像其他部分一样"消失",回到操作系统,然后在其他地方使用它。

所有"分叉"的进程内存都作为execl()的一部分被释放(如果调用成功)。

如果不是这种情况,在常规linux系统中会有很多内存泄漏,因为几乎不可能在不分配内存的情况下编写任何东西,甚至有点复杂,并且,例如,如果分配给execl()的参数,则不可能在调用execl()之前释放它们。