I would like to use gprof to profile a daemon. My daemon uses a 3rd party library, with which it registers some callbacks, then calls a main function, that never returns. I need to call kill (either SIGTERM or SIGKILL) to terminate the daemon. Unfortunately, gprof’s manual page says the following:
The profiled program must call “exit”(2) or return normally for the
profiling information to be saved in the gmon.out file.
Is there is way to save profiling information for processes which are killed with SIGTERM or SIGKILL ?
First, I would like to thank @wallyk for giving me good initial pointers. I solved my issue as follows. Apparently, libc’s gprof exit handler is called
_mcleanup. So, I registered a signal handler for SIGUSR1 (unused by the 3rd party library) and called_mcleanupand_exit. Works perfectly! The code looks as follows: