San*_*dro 7 python django exec
我试图在调用脚本死后生成一个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)
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
START PID: 13019
PARENT PID: 13019
CHILD PID: 13020
IN THE CHILD PID: 13020
Run Code Online (Sandbox Code Playgroud)
但现在当我检查实时流程时:
> 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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
因此,使用您的脚本,您将获得两个进程:一个runserver
正在执行,另一个(生成)使用Web服务器.核实:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1542 次 |
最近记录: |