我编写了以下测试python代码:
import signal
import time
import os
def handler(signum, frame):
print "do whatever, like call thread.interrupt_main()"
return
signal.signal(signal.SIGINT, handler)
while 1:
try:
time.sleep(10)
except:
os.kill(int(os.getpid()), signal.SIGINT)
pass
当我在Windows上执行此测试代码时,进程打印“执行任何操作,如调用thread.interrupt_main()”,然后退出; 在linux上,它可以正常工作。
为什么在Windows上它不起作用?
答案 0 :(得分:1)
http://docs.python.org/2/library/os.html#os.kill
Windows:signal.CTRL_C_EVENT和signal.CTRL_BREAK_EVENT信号 是特殊信号,只能发送到控制台进程 共享公共控制台窗口,例如一些子过程。任何其他 sig的值将导致进程无条件地被杀死 TerminateProcess API,退出代码将设置为sig。
请尝试以下代码:
import time
while 1:
try:
time.sleep(1)
except KeyboardInterrupt:
print "do whatever, like call thread.interrupt_main()"