Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 从信号处理程序调用时,sys.exit(1)不退出_Python_Multithreading - Fatal编程技术网

Python 从信号处理程序调用时,sys.exit(1)不退出

Python 从信号处理程序调用时,sys.exit(1)不退出,python,multithreading,Python,Multithreading,我有一个信号处理器 def signal_handler(signum, stack): do_something() sys.exit(1) 我是这样登记的: signal.signal(signal.SIGUSR1, signal_handler) 在进程运行期间,某些线程可能会调用os.kill(os.getpid(),signal.SIGUSR1) 因为我在程序的最开始就注册了这个信号,所以主线程可以获取这个信号并调用signal\u handler() 但是,sys

我有一个信号处理器

def signal_handler(signum, stack):
    do_something()
    sys.exit(1)
我是这样登记的:

signal.signal(signal.SIGUSR1, signal_handler)
在进程运行期间,某些线程可能会调用
os.kill(os.getpid(),signal.SIGUSR1)
因为我在程序的最开始就注册了这个信号,所以主线程可以获取这个信号并调用
signal\u handler()

但是,
sys.exit(1)
实际上并不退出程序。我感觉程序回到了被信号中断的地方

我不明白为什么会这样。我想使用
sys.exit
而不是
os.\u exit
的原因是我想触发在
atexit()中注册的函数


是否有任何方法可以从
信号处理程序退出程序,并在退出时触发
atexit()

是否有什么东西捕获了
SystemExit
异常?看起来Python 2和3中的
atexit
模块都有
\u run\u exitfuncs()
函数,因此,您可以手动调用它,然后调用
os.\u exit()
。我不确定它是否真正记录了从信号处理程序中引发异常(包括
SystemExit
)时发生的情况。信号处理程序在主线程的字节码之间的自己的堆栈上执行。另外,我注意到您将此标记为多线程。如果您实际上有非守护进程后台线程,
sys.exit
将在退出之前有效地将它们全部加入
中(至少在大多数实现和平台上;我认为在任何地方都没有记录到这一点)。A对我来说都非常有效。请将您的程序缩减为演示问题的最小程序,并将该程序复制粘贴到您的问题中。有关更多信息,请参阅。