修复 #I6ZRZX

根据对报错信息的分析,我认为这个问题可能是由于程序退出时由于updatekiller.py已将pid文件删除,导致要退出的程序在atexit模块注册的函数要删除记录到pid时找不到pid文件,导致报错。
但经过复现尝试,发现不是杀进程时触发的。因为杀进程时被杀的进程不会执行atexit。
由于已更新至最新版本,无法通过更新进行复现。所以具体报错原因尚未探究清楚,问题尚未完全修复。
This commit is contained in:
Bail 2023-07-18 21:57:53 +08:00
parent d37c7514f3
commit fb46147547
No known key found for this signature in database
GPG Key ID: 54660657CC504B46
1 changed files with 7 additions and 10 deletions

View File

@ -8,15 +8,12 @@ PIDFILE = '/tmp/uengine-runner.pid'
#程序结束时清理pid #程序结束时清理pid
@atexit.register @atexit.register
def remove_pid(): def remove_pid():
try: '''程序结束时清理pid'''
with open(PIDFILE) as pidfile: with open(PIDFILE) as pidfile:
pidlst = pidfile.readlines() pidlst = pidfile.readlines()
pidlst.remove(str(PID)+'\n') pidlst.remove(str(PID)+'\n') #移除记录中的pid
with open(PIDFILE,'w') as pidfile: with open(PIDFILE,'w') as pidfile:
pidfile.writelines(pidlst) pidfile.writelines(pidlst)
except:
# 忽略
pass
#更新时结束进程 #更新时结束进程
def main(): def main():
@ -25,7 +22,7 @@ def main():
os.kill(int(i),15) os.kill(int(i),15)
except ProcessLookupError: except ProcessLookupError:
pass pass
os.remove(PIDFILE) ## os.remove(PIDFILE) #因修复#I6ZRZX而注释
#当该程序被直接执行时执行结束进程操作。如果是导入的形式则只是记录pid #当该程序被直接执行时执行结束进程操作。如果是导入的形式则只是记录pid
if __name__ == '__main__': if __name__ == '__main__':