Z jakiegoś powodu siginterrupt() wydaje się tylko ustawić zachowanie dla pierwszego odebranego sygnału.siginterrupt() działa tylko dla pierwszego sygnału? (Python)
W tym przykładowym programie pierwszy SIGQUIT wydaje się nic nie robić, ale drugi sigquit wyświetla "SIGQUIT Handler", a s.accept() zgłasza wyjątek wywołania systemowego Przerwane.
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()
Co tu nie rozumiem?
Edytuj: Oto coś innego, czego nie mogę zrozumieć, w tym programie SIGQUIT przerywa select(). Czy to ma się stać?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
myślę, że 'siginterrupt' dotyczy naprawdę tylko wywołań systemowych, które dotyczą transferu danych (prymitywów takich jak otwarte, czytać i pisać). Nie sądzę, że dotyczy to wywołań systemowych, takich jak 'select'. – mhawke
Ah, ok. Jeszcze raz dziękuję :) –