在windows上使用python 3.4。
我正在尝试终止一个模拟按Ctrl+C(在linux上为Ctrl+D)的人的子进程。
目标是捕获键盘中断(SIGINT),并释放资源。但如果SIGINT不是来自键盘,则似乎不会抛出异常。这就是为什么我创建了一个处理程序,但该进程似乎根本不运行该处理程序。。。import multiprocessing
import time
import signal
import signal
import os
import sys
def handler(signal, frame):
print("handler!!!")
sys.exit(10)
def worker():
p = multiprocessing.current_process()
try:
signal.signal(signal.SIGINT,handler)
print("[PID:{}] acquiring resources".format(p.pid))
while(True):
#working...
time.sleep(0.5)
except (keyboardInterrupt, SystemExit):
pass
finally:
print("[PID:{}] releasing resources".format(p.pid))
if __name__ == "__main__":
lst = []
for i in range(1):
p = multiprocessing.Process(target=worker)
p.start()
lst.append(p)
time.sleep(3)
for p in lst:
os.kill(p.pid,signal.SIGINT)
p.join()
print(p)
print(p.exitcode)
print("joined all processes")
下面是输出的示例:C:\Users\Rui>python test.py
[PID:16524] acquiring resources
2
joined all processes我做错什么了?
我应该使用子流程模块吗?
我还可以尝试其他什么方法来中断进程执行?