我正在尝试编写一个python脚本,该脚本还处理终止/停止自身进程的信号。在
它一次运行一个文件,在特定的时间休眠,然后再次运行,直到它用文件完成整个目录。根据文件大小,每个文件的处理时间大约为5到10分钟。在
但是,我希望我的程序在我发出信号时停止。它不应该立刻杀死它。它应该运行当前文件,然后停止。在
所以我不能使用CTRLZ,因为它会立即挂起pid。在
stop = False
def handler(number, frame):
global stop
stop = True
signal.signal(signal.SIGUSR1, handler)
while not stop:
# Do things
上面是我试过的,但当我发信号时,它会立刻杀死它。而且,即使在处理完所有文件之后,它也会进入一个无限循环。在
当我发出信号,允许进程首先完成当前文件的处理时,我可以做些什么来停止进程?在
你可以创建一个线程。主线程仍然执行文件处理。例如,侦听器线程等待来自标准输入的命令。当你发送“停止”命令时,它设置一个变量。文件处理器线程在处理文件之前检查变量。所以,当您想停止处理时,它可以停止。在
只需安装一个信号处理器signal.SIGTERM信号-在它里面,你可以在你的程序中设置一个状态变量,当你处理完每一个文件时你会检查它。在
实际上非常简单-请参阅文档:https://docs.python.org/2/library/signal.html。在
(此外,您还可以使用其他信号—例如,当用户按ctrl+C时使用SIGINT)
相关问题 更多 >
编程相关推荐