3

我在 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()还是根本不停止?我可以在处理程序中明确停止它们吗?

4

1 回答 1

2

不,handledSIGSEGV不会影响任何其他线程(尽管如果它是由内存损坏或其他 UB 引起的,那么 UB 当然会影响其他线程)。SIGSEGV另一方面,未处理的会终止整个过程。

于 2012-05-24T16:39:01.257 回答