![](/img/trans.png)
[英]Python Multiprocessing atexit Error “Error in atexit._run_exitfuncs”
[英]Run atexit() when python process is killed
我有一個在后台運行的 python 進程,我希望它僅在腳本終止時生成一些輸出。
def handle_exit():
print('\nAll files saved in ' + directory)
generate_output()
atexit.register(handle_exit)
調用養KeyboardInterupt
異常和sys.exit()
調用handle_exit()
正確,但如果我是做kill {PID}
從終端則終止該腳本,而無需調用handle_exit()。
有沒有辦法終止在后台運行的進程,並且在終止之前仍然讓它運行handle_exit()
?
試試signal.signal 。 它允許捕捉任何系統信號:
import signal
def handle_exit():
print('\nAll files saved in ' + directory)
generate_output()
atexit.register(handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)
現在你可以kill {pid}
並且handle_exit
將被執行。
在 Windows 上調試 PyCharm 時啟用信號:
Ctrl + Shift + A
出“Find Actions...”菜單kill.windows.processes.softly
並啟用它(你可以開始輸入“kill”,它會搜索關鍵)要檢查您的系統並查看正在調用哪個信號:
import signal
import time
def handle_signal(sig_id, frame):
sig = {x.value: x for x in signal.valid_signals()}.get(sig_id)
print(f'{sig.name}, {sig_id=}, {frame=}')
exit(-1)
for sig in signal.valid_signals():
print(f'{sig.value}: signal.{sig.name},')
signal.signal(sig, handle_signal)
time.sleep(30)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.