Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不干净地退出C子进程而没有抱怨?_C_Fork_Valgrind - Fatal编程技术网

不干净地退出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

我有一个C程序,它由一个主进程组成

偶尔使用
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的结构并退出。它必须返回一个标志,告诉调用方这是一个子进程,它不应该做更多的工作,只需要清理并退出。这是一个非常复杂的问题,目前看来是不必要的。