从实用程序派生的子进程退出时,通常不可能释放所有内存。我想在库中抑制对这些的内存泄漏检测。
我不想让使用该库的开发人员--show-leak-kinds=all
不得不查看来自子进程的泄漏报告,因为没有人可以真正对它们做任何事情。
我知道--child-silent-after-fork=yes
命令行可用于禁止所有分叉进程的报告,但这也可能禁止来自主应用程序的报告,并要求用户记住始终指定此选项。
一个非常常见的问题是在使用 fork/exec 的代码中,当触发错误路径时需要终止子进程而不执行目标可执行文件(可能某些设置失败或可执行文件毕竟不是可执行文件) . 其他用例可能包括寿命更长的辅助进程(例如在 pulseaudio 或类似代码出现之前来自 alsa 的 dmix 进程)。
由于这应该对开发人员友好,因此我正在寻找可以在库中实现而无需手动将参数添加到 valgrind 调用的解决方案。可能的解决方案可能包括使用客户端请求、使用客户端请求监控命令或智能编码。
最小的例子:
// build with cc example.c -o example
// valgrind --leak-check=full --show-leak-kinds=all ./example
#include <stdlib.h>
#include <unistd.h>
void something_that_forks() {
pid_t pid = fork();
if (pid == 0) {
_exit(0);
}
}
int main(int argc, char* argv[]) {
void *some_allocation = malloc(1000);
something_that_forks();
free(some_allocation);
return 0;
}
我想something_that_forks 在某个图书馆里。我正在寻找一种方法来修改它,以便 valgrind 不会报告子进程中的泄漏。当然,库对其他组件在主程序中的分配一无所知。