2012-03-11 7 views
8

私は呼び出したスクリプトが終了した後に生きるdjangoプロセスを起動しようとしています。しかし、私はPIDが必要です。manage.pyは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) 

これは私に次のように出力できます:

> 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:私はライブプロセスをチェックするとき

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

しかし、今をかわった!地球上で何が起こっているのですか?

+0

私は知っています*私はこれを求めて後悔するつもりですが、なぜあなたのスクリプトからrunserverを始めていますか? –

+0

ほとんど自分自身のための実験。ちょうど私のペットdjangoサイトのすべてのプロセスを追跡する迅速なハックスクリプトをまとめる。恐ろしいことではなく、何かの一部ではない);私が車輪を発明し終えたら、すでにあなたが提案できるようなものをやっているツールはありますか? – Sandro

+0

私はいつもmod_wsgiの下でDjangoを実行するので、私が示唆できるものは実際にはありません。そこには多くのhttpd管理ツールがあります。 –

答えて

5

他のPIDが表示される場合は、間違いなく新しいプロセスがあります。新しいプロセスが生成された場所を簡単に見つけることができます。 django.core.management.commands.runserverで始まり、django.utils.autoreload.python_reloaderになります。 python_reloaderが、それはあなたがこの見ることができますrestart_with_reloaderに行く過程で初めて呼び出されたとき:runserverは、ウェブサーバで実行し、1(生まれた)された1:これ

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

を、スクリプトで次の2つのプロセスを取得します。それを確認してください:

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 
+1

@Sandro:最初にexecvp呼び出しでプロセスの名前を渡した場合は、すぐに2つのプロセスが存在することになります。 'os.execvp(" python "、[" python "、" manage.py "、" runserver "、" 0.0.0.0:2869 "])'です。これを行うには、常に良い練習です。 – Phani

+0

@Kirillあなたはそれを釘付けにしました。なぜ私がスポーンのコードベースをgrepしただけではないのか分かりません!ありがとうございました! – Sandro

+0

@Phani私は私が続くのかどうかはわかりません。最初の引数を追加すると何が行われますか? – Sandro

関連する問題