杀死由Python执行的后台进程
我有一个脚本
import os
os.system('python manage.py runserver')
这个脚本启动了django服务器(不管它具体做什么,反正只要按下ctrl+c
或其他快捷键就会停止)。
我想要的是通过其他方式停止服务器,而不是通过杀掉它的进程ID。
我尝试过的:
我试着使用subprocess
库和它的kill
命令,具体可以参考这里:如何终止一个用shell=True启动的python子进程
但是这并没有帮助。因为我猜,问题在于:我们杀掉的不是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 个回答
3
这听起来不太靠谱。 请不要这样做!
Django建议使用WSGI,这样可以让网络服务器(比如Apache、NginX等)自动加载和卸载Django,方便又省事。这里有详细的做法。另外,Django自带的网络服务器在安全性和扩展性上都不太行,不建议在生产环境中使用。总的来说,别这么做!
如果你不想用WSGI,也可以通过Apache做一个代理转发,或者用NginX等其他方法。Django服务器本身可以用很多系统服务工具来管理,比如init.d或supervisord。
直接回答你的问题,你可以用process.terminate()
来结束通过subprocess
启动的活动进程,但用Python脚本自己来运行服务器并不是个好主意,因为还有很多其他更好的工具可以用。