pthread: se opresc alte fire în timp ce rulează SIGSEGV?

Dezvolt un program pe Solaris 10. Vreau să imprime urmărirea stivei la accident. Am găsit acest exemplu:

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();
}

Lucrul interesant este: în timp ce /usr/proc/bin/pstack se execută, alte fire continuă să își tipărească și output-ul. Firele se reiau când sistemul () este sunat sau nu se opresc deloc? Pot să le opresc în mod explicit pe mâner?

0
Ei bine, nu am nimic de susținut acest lucru, dar mi-aș închipui că manipulatorul implicit îi ucide, dar când îți dai propriul handler (așa cum se pare că ai), nu sunt întrerupte sau uciși până când nu o faci singur.
adăugat autor Kevin, sursa

1 răspunsuri

Nu, un manipulat SIGSEGV nu afectează niciun alt thread (deși dacă a rezultat din deteriorarea memoriei sau din alte UB, UB ar putea, desigur, să afecteze alte fire). Un SIGSEGV neafectat, pe de altă parte, întrerupe întregul proces.

0
adăugat