Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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重新启动时会发送什么信号_Python_Windows_Signals - Fatal编程技术网

Python 自动更新后,windows重新启动时会发送什么信号

Python 自动更新后,windows重新启动时会发送什么信号,python,windows,signals,Python,Windows,Signals,我有一个运行在windows机器上的python脚本,当机器收到更新并关机重新启动时,我想听听这个信号,并在脚本中优雅地处理清理 当进程通过正常方式终止时,我的理解是该进程将发送SIGTERM信号。该信号可以被捕获和处理 但是,当系统由于windows更新而执行自动重新启动时,可能没有发送SIGTERM信号?是否改为发送SIGKILL?我知道SIGKILL是抓不到的,而且这个过程几乎是死的,我可以接受它——它只是改变了我如何恢复的策略 我理解用Python监听信号的过程,我特别要求的是澄清在wi

我有一个运行在windows机器上的python脚本,当机器收到更新并关机重新启动时,我想听听这个信号,并在脚本中优雅地处理清理

当进程通过正常方式终止时,我的理解是该进程将发送SIGTERM信号。该信号可以被捕获和处理

但是,当系统由于windows更新而执行自动重新启动时,可能没有发送SIGTERM信号?是否改为发送SIGKILL?我知道SIGKILL是抓不到的,而且这个过程几乎是死的,我可以接受它——它只是改变了我如何恢复的策略


我理解用Python监听信号的过程,我特别要求的是澄清在windows更新后windows自动重新启动时,会向进程发送什么信号,以确保您理解:windows实际上并没有发送这些信号,Python和/或Python使用的C运行时库正在模拟它们。@HarryJohnston C能够解释并传递给Python的信号是什么?最重要的是,在自动重新启动过程中会向进程发送哪些消息。我相信windows只包括SIGILL和SIGTERM是出于兼容性的原因。windows本身没有信号的概念。使用的方法取决于它是控制台应用程序、GUI应用程序还是服务;分别在MSDN中搜索SetConsoletrlHandler、WM_QUERYENDSESSION或SERVICE_CONTROL_SHUTDOWN。我对所有的细节都不熟悉。我可以确认C运行时库没有模拟SIGTERM,甚至没有定义SIGKILL。因此,如果您在Python代码中看到SIGTERM,则是Python解释器生成了它。@HarryJohnston、MSVC SIGABRT和SIGTERM只能与raise一起使用。SIGINT和SIGBREAK是从控制台的CTRL_C_事件和CTRL_BREAK_事件引发的。SIGFPE、SIGILL和SIGSEGV是针对某些Windows异常而提出的。CPython的信号模块是建立在CRT的信号处理之上的。它安装了一个SIGINT处理程序,并具有一个killpid、signal函数,当信号为CTRL_C_事件和CTRL_BREAK_事件时,该函数调用GenerateConsolectLevent,否则尝试通过TerminateProcess终止目标。要设置自定义控制台、GUI或服务处理程序,您需要ctypes或PyWin32。