我在 Solaris 10 上开发了一个程序。我希望它在崩溃时打印堆栈跟踪。我找到了这个例子:
static void pstack()
{
char buf[256];
sprintf(buf, "/usr/proc/bin/pstack %d |/bin/tee traceback.txt\n", (int)getpid());
/* undefine LD_PRELOAD to avoid 64-bit problems */
(void)putenv("LD_PRELOAD=");
system(buf);
}
void sighanterm(int signo, siginfo_t *info, void *context) {
...
pstack();
}
有趣的是:在/usr/proc/bin/pstack
执行时,其他线程也不断打印它们的输出。线程在被调用时恢复system()
还是根本不停止?我可以在处理程序中明确停止它们吗?