杀死python执行的后台进程

时间:2014-10-20 23:14:57

标签: python django pid

我有一个脚本

import os
os.system('python manage.py runserver')

脚本启动django服务器(无论它做什么,它都可以是任何评估,直到ctrl+c或其他按键快捷键被按下)。

我想要的是以任何方式停止服务器,而不是通过pid杀死它。


我尝试了什么:

我尝试使用subprocess lib及其kill命令,如下所述:How to terminate a python subprocess launched with shell=True

但它没有帮助。我猜,原因是:我们不是杀死manage.py runserver进程而是杀死评估python manage.py runserver的进程。因此,在查杀过程后,服务器仍在运行。

我也尝试过使用terminate方法:

p = subprocess.Popen('python manage.py runserver', stdout=subprocess.PIPE, shell=True)
time.sleep(5)
p.terminate()

我认为它应该以这种方式工作:服务器启动并在5秒后停止,但它永远不会停止。

有没有办法杀死这个过程?

1 个答案:

答案 0 :(得分:3)

这听起来很可疑。请不要这样做!

Django建议使用WSGI允许Web服务器(Apache,NginX等)根据需要自动加载和卸载Django。 Here's how to do that。此外,Django的内置Web服务器不被视为secure or scalable。一般来说,不要这样做!

如果您不喜欢使用WSGI,您还可以执行proxypass with ApacheNginX等.Django服务器本身可以通过任意数量的系统服务工具进行管理,例如{{3 }或init.d

要直接回答您的问题,您可以使用process.terminate()来终止使用subprocess启动的活动进程,但是当其他许多其他人使用python脚本运行您的服务器时,这是一个糟糕的主意很棒的工具。