pthread:在SIGSEGV处理程序运行时,其他线程是否停止?

时间:2012-05-24 15:54:05

标签: c pthreads signals solaris sigsegv

我在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()或根本不停止时线程是否恢复? 我可以在处理程序中明确地停止它们吗?

1 个答案:

答案 0 :(得分:2)

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