Wenn ein Unix (Posix) -Prozess ein Signal empfängt, wird ein Signalhandler ausgeführt.
Was passiert damit in einem Multithread-Prozess? Welcher Thread empfängt das Signal?
Meiner Meinung nach sollte die Signal-API erweitert werden, um dies zu handhaben (dh der Thread des Signal-Handlers sollte bestimmt werden können), aber auf der Suche nach Informationen im Netz fand ich nur jahrelange Flammen auf der Mailingliste des Linux-Kernels und auf verschiedene Foren. So wie ich es verstanden habe, unterschied sich das Konzept von Linus vom Posix-Standard, und zuerst wurde eine kompatible Ebene erstellt, aber jetzt folgt das Linux dem Posix-Modell.
Wie ist der aktuelle Stand?
linux
signals
posix
multithreading
Peterh: Setzen Sie Monica wieder ein
quelle
quelle
Antworten:
Der Eintrag in POSIX zu " Signalerzeugung und -lieferung " in "Begründung: Allgemeine Informationen zu Systemschnittstellen" lautet
Aus dem
signal(7)
Handbuch auf einem Linux-System:Und in
pthreads(7)
:Aus dem
pthreads(3)
Handbuch auf einem OpenBSD-System (als Beispiel für einen alternativen Ansatz):(Mir ist derzeit nicht bekannt, wie dies gehandhabt wird, wenn mehrere Threads gleichzeitig auf einem Multiprozessor-Computer ausgeführt werden.)
Die ältere LinuxThread-Implementierung von POSIX-Threads erlaubte nur das Targeting einzelner Threads durch Signale. Von
pthreads(7)
einem Linux-System aus:quelle