3
Solaris 10에서 프로그램을 개발합니다. 충돌시 스택 추적을 인쇄하고 싶습니다.pthread : SIGSEGV 처리기가 실행되는 동안 다른 스레드가 멈 춥니 다?
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()
이 호출되거나 스레드가 전혀 중단되지 않으면 스레드가 재개됩니까? 핸들러에서 명시 적으로 중지 할 수 있습니까?
글쎄, 나는 이것을 백업 할 것이 없다. 그러나 기본 처리기가 그들을 죽인다는 것을 상상할 수있다.하지만 당신이 처리 할 때까지 일시 중지하거나 죽이지는 않는다. 당신 자신. – Kevin