2012-02-27 8 views
3

私はCで書かれたプログラムを持っています。これはpopenを使って別のプログラムを開きます。私は、そのプログラムのピッド、またはそれのための何らかのハンドラを取得したいので、一定の制限時間の後にそれを強制終了するか、またはいくつかのRAMを超えて、そしてstdoutの制限を超えています。 PIDを必要とするptraceでこれを行う必要があると私は考えていますが、これはどのように取得するのか分かりません。C - popenで開かれたプロセスのPIDを取得する

答えて

6

PIDを返すpopenという独自の実装を作成してください。それは既存のpopenの周りのいくつかの狂ったハッカーよりずっと醜いです。ネット全体にpopenの実装のソースコードがあります。 Here's one

+1

s/crazy/horrible :-) –

+1

ありがとうございました。最高のソリューションと思われます。 – Paris

0

ptraceを使用せずに、ulimitsやその他のトリックを使用して目的の機能を実現することもできます。あなたはコマンドを"sh -c 'ulimit [ulimit strings]; whatever-command'"のようなものに書くことでこれを行うことができます。 ulimit -vはRAM制限を処理します。 CPUの時間制限(ulimit -t)は時間制限に近づく可能性があります。そうでない場合は、popenを書き換える場合は、setitimerに電話をかけてください。 stdoutはそれほど簡単ではありません。しかし、あなたがシェルリダイレクトでstdoutを記録している場合、私はulimit -fがそれを行うと思います。あなたが親で子供の標準出力を読んでいるなら、あなたはそれを自分で追跡し、あまりにも長くなると信号で殺すことができます。

関連する問題