2012-04-11 6 views
1

Ich versuche einen Signal-Handler zu implementieren. jeder Pthread ist mit Joinable erstellt und wird auf alle Signale mit sigprocmask blockiert.Prozess beendet, wenn signalisiert wird, dass ein PThread auf "Join" wartet

Das Problem tritt auf, wenn ich den Faden ein Signal von einem anderen Thread senden,

pthread_kill(_threads[threadIndex], SIGHALT); 

Wenn der angerufene Pthread zu der Zeit auf pthread_join wartet das Signal gesendet wird, verwendet wird, wird die gesamte proccess immidiately beendet. Wenn der Thread jedoch nicht auf den Join wartet, ignoriert er das Signal wie erwartet. Irgendeine Idee, warum es passiert und wie man es ändert?

Vielen Dank!

+1

Ist der Prozess beendet oder gibt 'Pthread_join' einen Fehlercode zurück, der die Ausführung des Programms beendet? – vhallac

+1

Kennt jemand "SIGHALT"? Habe es nie gesehen. Ist es das gleiche wie 'SIGSTOP'? –

+0

@Pavan Manjunath: Vielleicht ist es die deutsche Version von SIGSTOP? ;-) – alk

Antwort

0

In Bezug auf die Verwendung von sigprocmask() in einer mutithreaded Umgebung finden Sie in diesen Auszug aus der Seite des Menschen Methode:

Die Verwendung von sigprocmask() in einem Multithread-Prozess nicht spezifiziert ist; siehe pthread_sigmask (3).


Ich bin ein wenig unsicher über SIGHALT, aber es ist ein Synonym für SIGSTOP die folgenden von pthread_kill() ‚s-man-Seite unter der Annahme von Interesse sein könnten:

Signal Dispositionen sind prozessweiten : Wenn ein Signalhandler installiert ist, wird der Handler im Thread-Thread aufgerufen, aber wenn die Disposition des Signals "Stop", "Weiter" oder "Beenden" ist, wirkt sich diese Aktion auf den gesamten Prozess aus.

+0

Selbst die Deutschen können das Signal "SIGSTOP" nicht ignorieren :) Aber das OP zitiert eine Situation, in der der Thread das Signal erfolgreich ignoriert. Also ich denke, 'SIGHALT' ist nicht' SIGSTOP' –

Verwandte Themen