5

apache2 / WSGI Pythonで実行されているDjangoアプリ内から新しいPythonスクリプトプロセスをfork()およびexec()しようとしています。新しいPythonプロセスはデーモン化されているため、apache2との関連付けは保持されませんが、HTTPポートはまだ開いています。新しいプロセスはapache2を強制終了しますが、その結果、新しいpythonプロセスはポート80と443を開いたままにするので、これは望ましくありません。

新しいPythonプロセス内からポート80と443を閉じるにはどうすればよいですか?ソケットハンドル記述子にアクセスして閉じることができるようにする方法はありますか?

4

1 に答える 1

2

subprocessモジュールを使用してスクリプトを実行する場合、コンストラクターclose_fdsへの引数Popenはおそらく必要なことを実行します。

close_fdsがtrueの場合、子プロセスが実行される前に、0、1、および2を除くすべてのファイル記述子が閉じられます。

それらが単純に閉じられていないと仮定すると、最初の3つのファイル記述子は伝統的stdinstdout、、stderrであるため、Djangoアプリケーションのリスニングソケットは子プロセスで閉じられたものの1つになります。

于 2012-10-18T04:43:36.077 に答える