2012-03-15 10 views
1

私は、popenを使って基本的に "python myserver.py"をshell = Falseで実行し、いくつかのテストを実行し、次にkillpgによってサーバーをダウンさせるためのunittestingフレームワークを書いています。マルチプロセッシング(pgrp issue)を使用してスクリプトを呼び出すpython呼び出しをポップする?

このmyserver.pyは、マルチプロセスを使用して、それ自身のサブプロセスを生成することができます。問題は、私のテストでは、サーバプロセスのpgrp pidがユニットテストを実行している実際のメインスレッドと同じグループpidを共有しているように見えるため、pidグループのos.killpgを実行するだけでサーバがダウンするだけでなく、私がやりたいことではなく、popenを呼び出すプロセスです。それはなぜこれをするのですか?そして私はそれらを私が独立して殺すことができる別々のグループピッドにすることができますか?

答えて

1

あなたはここで何か面倒なことを聞​​いています。私は、あなたがしたいことはまったくないと思っています。そして、あなたは本当にこれを簡単な方法で実現したいと思っています。しかし、あなたが実際にプロセスグループを混乱させたいと仮定した場合...

一般に、新しいプロセスグループはsetpgrp(2)システムコールによってのみ作成されます。それ以外の場合は、fork(2)によって作成されたプロセスは、常に現在のプロセスグループのメンバです。つまり、新しいプロセスグループを作成すると、そのグループのプロセスはどんなttyによっても制御されず、プロセスグループモデル全体を理解する必要があると思われるようにすることが必要です。これがどのように機能するかについては、スティーブンスの "Unix環境での高度なプログラミング"を参考にしてください。

本当にこのルートを下りたい場合は、適切なシステムコールを使用してpopenまたは同等の機能を実装する必要があります。

+1

popenを再実装する必要はありません。 'preexec_fn = os.setpgrp'で' subprocess.Popen'を使います。 –

関連する問題