3

私はCで書かれたプログラムを持っています。それはpopenを使って別のプログラムを開きます。そのプログラムのpidまたはそのためのある種のハンドラーを取得して、特定の制限時間後に、またはRAMとstdoutの制限を超えた場合にそれを強制終了したいと思います。これは、取得方法がわからないPIDを必要とするptraceを使用して実行する必要があると思います。

4

2 に答える 2

6

popenPIDを返す独自の実装を作成するだけです。これは、既存のクレイジーなハッカーよりも醜いものではありませんpopenpopenネット中の実装のソースコードを見つけることができます。これが1つです。

于 2012-02-27T09:12:26.260 に答える
0

また、ulimitsやその他のトリックを使用して、ptraceを使用せずに目的の機能を実現できる場合もあります。これを行うには、コマンドをに似たものにするように記述します"sh -c 'ulimit [ulimit strings]; whatever-command'"ulimit -vRAM制限を処理します。CPU時間制限(ulimit -t)は、時間制限を概算できる場合があります。そうでない場合、そしてあなたが書き直しても構わないと思っているなら、あなたはそこにpopen電話をかけることができますsetitimer。stdoutはそれほど単純ではありません。しかし、シェルリダイレクトを使用してstdoutをログに記録している場合は、それを実行すると思いますulimit -f。親で子供のstdoutを読んでいる場合は、自分で追跡し、長すぎる場合は信号で殺すことができます。

于 2012-02-27T14:28:37.490 に答える