我正在开发一些代码,当在unix中从命令行发送sigterm信号时,需要优雅地关闭这些代码。我发现这个例子https://stackoverflow.com/a/31464349/7019148很好用,但是有一个问题。在
代码:
import signal
import time
class GracefulKiller:
def __init__(self):
signal.signal(signal.SIGTERM, self.exit_gracefully)
self.kill_now = False
def exit_gracefully(self, signum, frame):
self.kill_now = True
def run_something(self):
print("starting")
time.sleep(5)
print("ending")
if __name__ == '__main__':
killer = GracefulKiller()
print(os.getpid())
while True:
killer.run_something()
if killer.kill_now:
break
print("End of the program. I was killed gracefully :)")
当您传递kill命令kill -15 <pid>
时,run\u something方法会被中断,进程也会被优雅地终止。但是,有没有一种方法可以让run_something方法在进程被终止之前完成?即防止中断?在
期望输出:
^{pr2}$我的用例是这将变成一个下载脚本,如果我想终止进程,我希望进程在终止之前完成下载。。。
答案在原来的问题里。我只是把这个留给未来的谷歌搜索者。在
我一开始就没有问题,我的终端只是在
kill
命令后打印“ending”时出现问题。在thread.join()
即使捕获到退出信号,也要等待线程完成。在相关问题 更多 >
编程相关推荐