GitPython和execl离开僵尸进程?

时间:2018-07-12 18:05:41

标签: python process gitpython

我有一个小巧的Python脚本,该脚本利用GitPython进行自我更新:

repo = git.Repo(search_parent_directories=True)
remote = repo.remotes.origin
remote.pull()
os.execl(sys.executable, *([sys.executable] + sys.argv))

此脚本在Ubuntu下作为systemd服务运行,但是我注意到这种安排存在问题。即,进行了许多僵尸进程并徘徊(其中18931是我的脚本的PID):

$ ps axo stat,ppid,pid,comm | grep -w defunct
Z    18931  4947 git <defunct>
Z    18931  5278 git <defunct>
Z    18931  5279 git <defunct>
[[ even more entries ]]
Z    18931 26955 git <defunct>
Z    18931 28551 git <defunct>
Z    18931 28552 git <defunct>

我该怎么做才能确保GitPython干净/优雅地关闭并确保这些僵尸不会缠住?


我使用os.execl()作为就地重新启动脚本的方法,而不必手动重新启动或依靠systemd /任何其他服务来重新启动。我从this question开始实施了该方法,它似乎很好用。

我不确定这些僵尸进程是systemd还是脚本本身的结果,尽管我怀疑脚本本身是造成这种情况的原因。

理想情况下,我想继续使用execl(),因为就我而言,它{相对而言}是干净的,并且似乎根本不会干扰systemd。但是,如果没有办法保留execl(),我可以接受其他解决方案。

0 个答案:

没有答案