我正在尝试使用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
理想情况下,应用程序逻辑应该利用消息传递或类似的方式,以便子线程可以通知主线程它应该终止。