gprof使用没有生成gmon.out

我在我的服务器程序中添加了-pg标示,然后运行服务器程序,我的服务程序是一直运行的,正常情况下不会停止,但是并未生成gmon.out文件,咋整!

程序没退出,没法生成结果

gprof不能产生gmom.out文件的原因:gprof只能在程序正常结束退出之后才能生成程序测评报告,原因是gprof通过在atexit()里注册了一个函数来产生结果信息,任何非正常退出都不会执行atexit()的动作,所以不会产生gmon.out文件。所以,以下情况可能不会有gmon.out文件产生:
1,程序不是从main return或exit()退出,则可能不生成gmon.out。
2,程序如果崩溃,可能不生成gmon.out。
3,测试发现在虚拟机上运行,可能不生成gmon.out。
4,程序忽略SIGPROF信号!一定不能捕获、忽略SIGPROF信号。man手册对SIGPROF的解释是:profiling timer expired. 如果忽略这个信号,gprof的输出则是:Each sample counts as 0.01 seconds. no time accumulated.
5,如果程序运行时间非常短,则gprof可能无效。因为受到启动、初始化、退出等函数运行时间的影响。如果你的程序是一个不会退出的服务程序,那就只有修改代码来达到目的。如果不想改变程序的运行方式,可以添加一个信号处理函数解决问题(这样对代码修改最少),例如:
  static void sighandler( int sig_no )
  {
  exit(0);
  }
  signal( SIGUSR1, sighandler );
这样当使用kill -USR1 pid 后,程序退出,生成gmon.out文件