不干净地退出C子进程而没有抱怨?
我有一个C程序,它由一个主进程组成 偶尔使用不干净地退出C子进程而没有抱怨?,c,fork,valgrind,C,Fork,Valgrind,我有一个C程序,它由一个主进程组成 偶尔使用fork()来创建并行子进程。它们只存在几秒钟 我的主进程很好地退出,没有分配它的malloc()内存 我希望子进程在没有取消分配其(父进程)的所有malloc()内存的情况下死亡,因为我没有干净的方法让它们这样做 然而,每当子进程退出(0)s时,Valgrind都会大声抱怨 我正在使用命令: valgrind --leak-check=yes --leak-check=full --show-leak-kinds=all --trace-childr
fork()
来创建并行子进程。它们只存在几秒钟
我的主进程很好地退出,没有分配它的malloc()
内存
我希望子进程在没有取消分配其(父进程)的所有malloc()
内存的情况下死亡,因为我没有干净的方法让它们这样做
然而,每当子进程退出(0)s时,Valgrind都会大声抱怨
我正在使用命令:
valgrind --leak-check=yes --leak-check=full --show-leak-kinds=all --trace-children=no ./my_program
我已经尝试了--跟踪儿童=no
。(它应该是默认值,但Valgrind始终跟踪子进程。)
我是否可以在代码或开关中做些什么,使Valgrind不在子进程上运行 事实证明,--trace children=no
只适用于后跟exec()
的fork()
s
我需要的是:
--child silent after fork=yes
@TonyTannous分配的内存仅由父进程写入,但子进程使用它们的堆栈。假设fork()仍然是针对子进程的写时复制,我看不到相关性。@TonyTannous子进程无法释放父进程的内存。Valgrind在抱怨,因为子进程没有释放其父进程内存的副本。子进程是用fork()
创建的,但后面没有exec()
。我删除了注释,因为它们与您的问题无关。为什么不让子进程像父进程一样释放所有内存?@JonathanLeffler从父进程的多个位置调用/分叉子进程,因此,它不能简单地释放父malloc的结构并退出。它必须返回一个标志,告诉调用方这是一个子进程,它不应该做更多的工作,只需要清理并退出。这是一个非常复杂的问题,目前看来是不必要的。