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()
ますか、それともまったく停止しませんか? ハンドラーで明示的に停止できますか?