作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法干净地杀死 uvicorn?
即,如果它在终端的前台运行,我可以在它上面键入 ^C。这会导致 uvivorn 进程终止,并且所有工作进程都将被清理。 (即,它们消失了。)
另一方面,如果 uvicorn 在没有终端的情况下在后台运行,那么我无法想出一种干净地杀死它的方法。它似乎忽略了 SIGTERM、SIGINT 和 SIGHUP。我可以用 SIGKILL(即 -9)杀死它,但是工作进程仍然活着,我必须跟踪所有工作进程并杀死它们。这并不理想。
我在 Red Hat Enterprise Linux Server 7.3 (Maipo) 上使用带有 CPython 3.7.4、uvivorn 版本 0.11.2 和 FastAPI 0.46.0 的 uvicorn。
最佳答案
那是因为您正在运行 uvicorn
作为您唯一的服务器。 uvicorn
不是进程管理器 并且,因此,它不管理它的 worker 生命周期。这就是为什么they recommend running uvicorn using gunicorn+UvicornWorker用于生产。
也就是说,您可以使用以下脚本杀死产生的 worker 并触发其关闭:
$ kill $(pgrep -P $uvicorn_pid)
这有效但无效的原因
kill
在父 pid 上是因为当您
^C
某些东西,信号会在所有附加到
stdin
的衍生进程中传输。 .
关于python - 有没有办法干净地杀死 uvicorn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424390/
我是一名优秀的程序员,十分优秀!