Python脚本是从内部杀死的,但这个过程不会;不要死


Python script is killed from within, but the process doesn't die

我正在尝试使用php执行一个python脚本,并使用如下exec命令:

exec("python /address/to/script.py");

我不需要脚本运行到完成,所以在它完成我需要的操作后,我从其中调用sys.exit()。执行被传递回php脚本,这很好,但python进程仍在运行。我可以在服务器的进程列表中看到它。需要更多的东西才能完全杀死它吗?

附加信息

  • python脚本是由第三方编写的。

  • 我对python知之甚少,只够添加sys.exit()调用。

脚本可能仍在执行一些清理代码,或者您可能正在从一个子进程调用sys.exit(),该子进程本质上是在调用thread.exit(),而父进程仍在运行。

检查sys.exit()调用是否在脚本的主要部分中,并且没有错误处理干扰SystemExit异常,或者您可以尝试os._exit()。还要确保传递给exec()的命令中不存在与号(&),因为这将导致脚本作为后台进程运行。

注意os._exit()不太好,因为它不进行任何清理,基本上会立即结束该过程。

编辑要从try块中结束脚本,可以执行以下操作:

try:
    # Existing Code
except SysExit:
    os._exit() # quit the process
except:
    # Existing error handling

理想情况下,应用程序逻辑应该利用消息传递或类似的方式,以便子线程可以通知主线程它应该终止。