由於某些原因,siginterrupt()似乎只能設置接收到的第一個信號的行爲。siginterrupt()僅適用於第一個信號? (Python)
在此示例程序中,第一個SIGQUIT看起來什麼都不做,但第二個sigquit打印出「SIGQUIT Handler」,而s.accept()則拋出了Interrupted系統調用異常。
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()
我在這裏誤解了什麼?
編輯:這是別的東西,我不明白,在這個程序中,一個SIGQUIT中斷select()。這是否應該發生?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
我認爲'siginterrupt'真的只適用於涉及數據(原語如打開,讀取或寫入)的傳輸系統調用。我不認爲它適用於像「select」這樣的系統調用。 – mhawke 2009-11-03 04:19:05
啊,好的。再次感謝:) – 2009-11-03 05:09:51