Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我的任务被使用python的windows上的taskmgr终止时,有没有办法运行关闭函数?_Python_Python 3.x - Fatal编程技术网

当我的任务被使用python的windows上的taskmgr终止时,有没有办法运行关闭函数?

当我的任务被使用python的windows上的taskmgr终止时,有没有办法运行关闭函数?,python,python-3.x,Python,Python 3.x,若用户使用CTRL+C或X,我可以运行func,但若用户试图在windows上使用任务管理器终止我的程序,有办法运行最后一个函数吗?我正在使用Python3.3和Windows7。我试过atexit,信号模块,但它们不工作。我不能停止taskmgr吗?是的,我想可以 import signal signal.signal(signal.SIGTERM, custom_func) 谷歌搜索Python windows捕获进程终止后的更多信息 但是,如果不管是什么信号,该信号都是一个kill,那

若用户使用CTRL+C或X,我可以运行func,但若用户试图在windows上使用任务管理器终止我的程序,有办法运行最后一个函数吗?我正在使用Python3.3和Windows7。我试过atexit,信号模块,但它们不工作。我不能停止taskmgr吗?

是的,我想可以

import signal
signal.signal(signal.SIGTERM, custom_func)
谷歌搜索Python windows捕获进程终止后的更多信息


但是,如果不管是什么信号,该信号都是一个kill,那么您就不能用一个需要时间的函数来中断该调用,因为在unix中,这是一个强制终止-9,我认为这会降低进程的任何处理能力。如果我错了,请纠正我,但如果函数被强制,则无法中止或调用该函数?

这里的关键问题是taskmgr是否在终止进程之前尝试某种软终止可能会先发布WM_QUIT?。没有办法处理TerminateProcess,但您可以处理WM_退出,尽管不使用信号,probably@AntonKovalenko我认为你是对的-IIRC,你可以处理一个结束任务SIGTERM,这为清理工作提供了便利,但是如果一个用户做了一个结束进程,而这个结束进程实际上只应该是行为不好的程序所需要的,那么你就被填满了…没错,WM_退出SIGTERM可以响应,并因此获得如上所示的宽限期。但是,结束进程强制终止进程,这意味着PID不允许有更多的处理能力,因此根本不可能从堆栈中删除。。但正如@JonClements所提到的,这应该只需要在行为不正常的应用程序上进行,即使在大多数情况下,无休止的循环甚至可能不需要结束进程。