frame 引数は、実行フレームとも呼ばれるスタック フレームです。信号によって中断されたフレームを指します。どのスレッドもシグナルによって中断される可能性がありますが、シグナルはメインスレッドでのみ受信されるため、このパラメーターは必須です。
例:
import signal
import os
import traceback
def handler(signum, frame):
print signum, frame
print "print stack frames:"
traceback.print_stack(frame)
def demo(n):
if n == 3:
os.kill(os.getpid(), signal.SIGUSR1)
return
demo(n+1)
signal.signal(signal.SIGUSR1, handler)
demo(1)
出力:
$ python t.py
10 <frame object at 0x1e00520>
print stack frames:
File "t.py", line 17, in <module>
demo(1)
File "t.py", line 14, in demo
demo(n+1)
File "t.py", line 14, in demo
demo(n+1)
File "t.py", line 12, in demo
os.kill(os.getpid(), signal.SIGUSR1)