Smalltalk als Hintergrund
EINTR
ist der Fehler, den sogenannte unterbrechbare Systemaufrufe zurückgeben können. Wenn ein Signal auftritt, während ein Systemaufruf ausgeführt wird, dieses Signal nicht ignoriert wird und ein Signalhandler dafür definiert wurde, der SA_RESTART
nicht gesetzt ist, und dieser Handler dieses Signal verarbeitet, gibt der Systemaufruf den EINTR
Fehlercode zurück.
Als Randnotiz habe ich diesen Fehler sehr oft ncurses
in Python erhalten.
Die Frage
Gibt es eine Begründung für dieses im POSIX-Standard festgelegte Verhalten? Man kann verstehen, dass es möglicherweise nicht möglich ist, fortzufahren (abhängig vom Kernel-Design). Was ist jedoch der Grund dafür, dass es nicht automatisch auf Kernel-Ebene neu gestartet wird? Ist dies aus alten oder technischen Gründen? Wenn dies aus technischen Gründen geschieht, sind diese Gründe heute noch gültig? Wenn dies aus alten Gründen geschieht, wie ist dann die Geschichte?
quelle
SA_RESTART
set werden nicht alle Systemaufrufe automatisch neu gestartet. Zum Beispiel startet Linux nicht neumsgsnd()
odermsgrcv()
.Richard Gabriel hat einen Artikel The Rise of 'Worse is Better' geschrieben, in dem die Wahl des Designs hier in Unix erörtert wird:
quelle