Per qualche ragione, siginterrupt() sembra solo impostare il comportamento per il primo segnale ricevuto.siginterrupt() funziona solo per il primo segnale? (Python)
In questo programma di esempio, il primo SIGQUIT sembra non eseguire nulla, ma il secondo sigquit stampa "SIGQUIT Handler" e s.accept() genera un'eccezione di chiamata di sistema interrotta.
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()
Cosa sto fraintendendo qui?
Edit: Ecco un'altra cosa che io non riesco a capire, in questo programma, un SIGQUIT interrompe il select(). Dovrebbe succedere?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
penso che 'siginterrupt' realmente si applica solo alle chiamate di sistema che coinvolgono il trasferimento dei dati (primitive come apertura, lettura o scrittura). Non penso che si applichi alle chiamate di sistema come 'select'. – mhawke
Ah, ok. Grazie ancora :) –