我在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()
或根本不停止时线程是否恢复?
我可以在处理程序中明确地停止它们吗?
答案 0 :(得分:2)
不,处理的SIGSEGV
不会影响任何其他线程(尽管如果它是由内存损坏或其他UB引起的,那么UB当然会影响其他线程)。另一方面,未处理的SIGSEGV
会终止整个过程。