php - Python 脚本从内部被杀死,但进程并没有死

标签 php python linux exec

我正在尝试使用 php 和这样的 exec 命令执行 python 脚本:

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 block 中结束脚本,您可以这样做:

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

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

关于php - Python 脚本从内部被杀死,但进程并没有死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555202/

相关文章:

c++ - 在 linux 上用 C++ 创建一个 ramdisk

php - mySQL 查询中的更新不起作用?

php - 用户通过 PHP 中的登录表单登录后数据无法正确显示

php - 取消设置类以清除内存

php - 错误: You have an error in your SQL syntax; check the manual that corresponds .。第 1 行 '1' 附近使用的语法

python - 如何在 pandas dataframe 中编写简单的信号逻辑?

python - tornado 将 GET 和 POST 参数映射到列表。如何禁用此 "feature"?

python - sklearn.model_selection.train_test_split 示例中的 "random-state"是什么?

linux - Windows 上 Eclipse IDE 的系统范围 SSH 配置文件

linux - 虚拟机上没有设备文件/dev/mem,如何创建一个