我正在尝试使用 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/