Aus irgendeinem Grund scheint siginterrupt() nur das Verhalten für das erste empfangene Signal einzustellen.siginterrupt() funktioniert nur für das erste Signal? (Python)
In diesem Beispielprogramm scheint das erste SIGQUIT nichts zu tun, aber das zweite sigquit gibt "SIGQUIT Handler" aus, und s.accept() löst eine unterbrochene Systemaufrufausnahme aus.
from signal import *
from socket import *
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
s = socket()
s.bind(("0.0.0.0", int(sys.argv[1])))
s.listen(5)
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
client, addr = s.accept() # Or any syscall that blocks
client.close()
s.close()
Was missverstehe ich hier?
Edit: Hier ist etwas anderes, das ich nicht herausfinden kann, in diesem Programm ein SIGQUIT unterbricht die select(). Soll das passieren?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
Ich denke, dass 'siginterrupt' wirklich nur für Systemaufrufe gilt, dass die Übertragung von Daten (Primitiven wie Öffnen, Lesen oder Schreiben) beinhalten. Ich glaube nicht, dass es sich auf Systemaufrufe wie 'select' bezieht. – mhawke
Ah, ok. Danke nochmal :) –