Python脚本从内部被杀死,但进程不会死亡

时间:2016-07-24 18:12:14

标签: php python linux exec

我正在尝试使用带有exec命令的php执行python脚本:

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

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

其他信息

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

  • 我对python知之甚少,足以添加sys.exit()来电。

1 个答案:

答案 0 :(得分:0)

该脚本仍然可以执行一些清理代码,或者您可以从子进程调用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

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