c++ - 如何正确处理信号,以便 gperftools CPU 分析器仍然有效?

标签 c++ multithreading signals profiler gperftools

我想分析我的守护程序,它会暂停主线程:

sigset_t signal_mask;
sigemptyset(&signal_mask);
sigaddset(&signal_mask, SIGTERM);
sigaddset(&signal_mask, SIGINT);

int sig;
sigwait(&signal_mask, &sig);

所有其他线程只是阻塞所有信号。 据我所知,探查器使用 SIGPROF 信号进行操作。如果我使用这样的代码开始分析,输出的 .prof 文件是空的:

env CPUPROFILE=daemon.prof ./daemon

我应该如何正确处理主线程和其他线程中的信号以启用分析?或者可能是其他地方的问题?

最佳答案

All other threads simply block all signals.

您只需在所有线程(或您想要分析的线程)中解除阻塞 SIGPROF。我们只是在多线程守护进程中解决完全相同的问题。

关于c++ - 如何正确处理信号,以便 gperftools CPU 分析器仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19582060/

相关文章:

c++ - 初始化const 3D数组成员变量

c - 线程安全的多文件写入

c++ - 将 std::bind 与 boost::signals2 一起使用是否安全?

C++:线程间共享的静态函数成员,可以全部阻塞吗?

c++ - 单一方法的重载与 C++ 中属性的获取/设置?

java - 在锁定 lock 之后但在 try-finally 之前可能出现异常

python - python 3.7 多线程中的 GIL 行为

c - 在 Linux 中处理系统(命令)调用超时

c++ - pthread_join() 可能会产生什么信号?

c++ - 如何有效地在 vector 中插入多个可复制构造但不可复制分配的元素?