Python 脚本从内部终止,但进程没有终止
Python script is killed from within, but the process doesn't die
我正在尝试使用 php 和这样的 exec 命令来执行 python 脚本:
exec("python /address/to/script.py");
我不需要脚本来 运行 完成,所以在它完成我需要的操作后,我从其中调用 sys.exit()
。执行被传递回 php 脚本,这很好,但是 python 过程仍然是 运行。我可以在服务器的进程列表中看到它。是否需要更多才能完全杀死它?
附加信息
python脚本由第三方编写。
我对python知之甚少,刚好补充sys.exit()
调用。
脚本可能仍在执行一些清理代码,或者您可能正在从子进程调用 sys.exit()
,子进程实际上将调用 thread.exit()
,而父进程 运行ning .
检查 sys.exit()
调用是否在脚本的主要部分,并且没有错误处理干扰 SystemExit
异常,或者您可以尝试 os._exit()
。还要确保传递给 exec()
的命令中不存在与符号 (&
),因为这将导致脚本 运行 作为后台进程。
请注意 os._exit()
并不受欢迎,因为它不进行任何清理,并且基本上会立即结束进程。
编辑 要从 try
块中结束脚本,您可以这样做:
try:
# Existing Code
except SysExit:
os._exit() # quit the process
except:
# Existing error handling
理想情况下,应用程序逻辑应该使用消息传递或类似的东西,以便子线程可以通知主线程它应该终止。
我正在尝试使用 php 和这样的 exec 命令来执行 python 脚本:
exec("python /address/to/script.py");
我不需要脚本来 运行 完成,所以在它完成我需要的操作后,我从其中调用 sys.exit()
。执行被传递回 php 脚本,这很好,但是 python 过程仍然是 运行。我可以在服务器的进程列表中看到它。是否需要更多才能完全杀死它?
附加信息
python脚本由第三方编写。
我对python知之甚少,刚好补充
sys.exit()
调用。
脚本可能仍在执行一些清理代码,或者您可能正在从子进程调用 sys.exit()
,子进程实际上将调用 thread.exit()
,而父进程 运行ning .
检查 sys.exit()
调用是否在脚本的主要部分,并且没有错误处理干扰 SystemExit
异常,或者您可以尝试 os._exit()
。还要确保传递给 exec()
的命令中不存在与符号 (&
),因为这将导致脚本 运行 作为后台进程。
请注意 os._exit()
并不受欢迎,因为它不进行任何清理,并且基本上会立即结束进程。
编辑 要从 try
块中结束脚本,您可以这样做:
try:
# Existing Code
except SysExit:
os._exit() # quit the process
except:
# Existing error handling
理想情况下,应用程序逻辑应该使用消息传递或类似的东西,以便子线程可以通知主线程它应该终止。