主程序
import os,pymsgbox
try:
c=os.getpid()
with open("sample.txt","w") as fp:
fp.write(str(c))
while True:
print ""
except Exception,e:
print e
finally:
pymsgbox.alert("Done")
实际杀死进程的文件
import os,signal
with open("sample.txt","r") as fp:
pid=fp.read()
os.kill(int(pid),signal.SIGTERM)
在finally块中我想关闭所有打开的连接。那么如何调用finally块
答案 0 :(得分:1)
试过这个:
import atexit
def final_sub():
pymsgbox.alert("Done")
atexit.register(final_sub)
atexit模块定义了一个用于注册清理功能的函数。更多信息可以在这里找到:atexit — Exit handlers
也..而不是调用atexit.register,你可以通过装饰器做同样的事情:
@atexit.register
def final_sub():
pymsgbox.alert("Done")
但是,有一个讨论here 通过它,atexit可能不适用于您的情况。所以你需要SIGTERM信号的处理程序。
尝试在文件的开头添加此代码,并且“finally”在SIGTERM上开始工作。 Hadler在SIGTERM上引发了正常的SystemExit,所以最后工作:
import signal
class SigTerm(SystemExit): pass
def sigterm(sig,frm): raise SigTerm
signal.signal(15,sigterm)
所以,完整的代码将是这样的:
import os
import pymsgbox
import signal
class SigTerm(SystemExit): pass
def sigterm(sig,frm): raise SigTerm
signal.signal(15,sigterm)
def final_sub():
pymsgbox.alert("Done")
try:
c=os.getpid()
with open("sample.txt","w") as fp:
fp.write(str(c))
while True:
print("")
except Exception as e:
print(e)
finally:
final_sub()