gpt4 book ai didi

linux - 在终止进程之前保存 gmon.out

转载 作者:IT王子 更新时间:2023-10-29 00:18:14 26 4
gpt4 key购买 nike

我想使用 gprof 来分析守护进程。我的守护进程使用第 3 方库,它注册了一些回调,然后调用一个永远不会返回的 main 函数。我需要调用 kill(SIGTERM 或 SIGKILL)来终止守护进程。不幸的是,gprof 的手册页说明如下:

The profiled program must call "exit"(2) or return normally for the profiling information to be saved in the gmon.out file.

有没有办法保存被 SIGTERM 或 SIGKILL 杀死的进程的分析信息?

最佳答案

首先,我要感谢@wallyk 给我很好的初步指导。我按如下方式解决了我的问题。显然,libc 的 gprof 退出处理程序称为 _mcleanup。因此,我为 SIGUSR1 注册了一个信号处理程序(未被第 3 方库使用)并调用了 _mcleanup_exit。完美运行!代码如下所示:

#include <dlfcn.h>
#include <stdio.h>
#include <unistd.h>

void sigUsr1Handler(int sig)
{
fprintf(stderr, "Exiting on SIGUSR1\n");
void (*_mcleanup)(void);
_mcleanup = (void (*)(void))dlsym(RTLD_DEFAULT, "_mcleanup");
if (_mcleanup == NULL)
fprintf(stderr, "Unable to find gprof exit hook\n");
else _mcleanup();
_exit(0);
}

int main(int argc, char* argv[])
{
signal(SIGUSR1, sigUsr1Handler);
neverReturningLibraryFunction();
}

关于linux - 在终止进程之前保存 gmon.out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com