Vì một số lý do, siginterrupt() dường như chỉ thiết lập hành vi cho tín hiệu đầu tiên nhận được.siginterrupt() chỉ hoạt động đối với tín hiệu đầu tiên? (Python)
Trong chương trình ví dụ này, SIGQUIT đầu tiên dường như không làm gì cả, nhưng sigquit thứ hai in "SIGQUIT Handler" và s.accept() ném một ngoại lệ cuộc gọi hệ thống bị gián đoạn.
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()
Tôi hiểu nhầm điều gì ở đây?
Chỉnh sửa: Đây là điều khác mà tôi không thể tìm ra, trong chương trình này, SIGQUIT ngắt chọn(). Đó có phải là chuyện xảy ra không?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
Tôi nghĩ rằng 'siginterrupt' thực sự chỉ áp dụng cho các cuộc gọi hệ thống có liên quan đến việc chuyển giao dữ liệu (nguyên thủy như mở, đọc hoặc viết). Tôi không nghĩ rằng nó áp dụng cho các cuộc gọi hệ thống như 'select'. – mhawke
Ah, ok. Cảm ơn một lần nữa :) –