gpt4 book ai didi

python - manage.py 会改变它的 PID 吗?

转载 作者:太空狗 更新时间:2023-10-29 21:50:43 27 4
gpt4 key购买 nike

我正在尝试生成一个在调用脚本终止后继续存在的 Django 进程。但我需要它的 PID。

所以我写了下面的代码:

def runserver():
print("START PID: " + str(os.getpid()))
pid = os.fork()

if pid == 0:
#cmd = "/usr/bin/env python manage.py runserver 0.0.0.0:2869"
print("IN THE CHILD PID: " + str(os.getpid()))
os.execvp("python", ["", "manage.py", "runserver", "0.0.0.0:2869"])
else:
print("PARENT PID: " + str(os.getpid()))
print("CHILD PID: " + str(pid))
updatepid("runserver", pid)

这给了我以下输出:

START PID: 13019
PARENT PID: 13019
CHILD PID: 13020
IN THE CHILD PID: 13020

但是现在当我检查实时进程时:

> ps aux | grep python | grep -v grep
sandro 13031 0.4 0.3 296080 23756 pts/2 Sl 22:14 0:01 /home/sandro/.virtualenvs/polling/bin/python2.7 manage.py runserver 0.0.0.0:2869

pid 变了!这到底是怎么回事???

最佳答案

如果您看到另一个 PID,那么肯定有一个新进程。您可以轻松找到新进程产生的位置。开始于 django.core.management.commands.runserver然后你会来到django.utils.autoreload.python_reloader .当 python_reloader 在进程中第一次调用时,它会转到 restart_with_reloader ,您可以在其中看到:

exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)

因此,通过您的脚本,您可以获得两个进程:一个是 runserver 正在执行的进程,另一个是(生成的)网络服务器。检查一下:

START PID: 3091
PARENT PID: 3091
CHILD PID: 3092
IN THE CHILD PID: 3092

$ ps ax | grep runserver | grep -v grep
3092 pts/1 S 0:00 runserver 0.0.0.0:2869
3093 pts/1 Sl 0:05 /home/kirill/testenv/bin/python manage.py runserver 0.0.0.0:2869

关于python - manage.py 会改变它的 PID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9652447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com