何らかの理由で、siginterrupt()は最初に受信した信号の振る舞いを設定しているようです。siginterrupt()は最初のシグナルに対してのみ機能しますか? (Python)
このサンプルプログラムでは、最初のSIGQUITは何もしないように見えますが、2番目のsigquitは "SIGQUIT Handler"を出力し、s.accept()は中断システムコール例外をスローします。
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], [], [])
を参照してください。私は 'select'のようなシステムコールには当てはまらないと思います。 – mhawke
ああ、大丈夫です。もう一度ありがとう:) –