私はメモリの制限のセット(理想的には、データセグメント、同様のスタックとヒープ)でプロセスを実行したい 私のコードはセットC中のプロセスのメモリ制限
child = fork();
if (child == 0)
{
...
execv(program, args);
}
wait(&status);
ようになります
この構造浮き袋する必要があり、私は(実行時間などを計測リダイレクトSTDIN /アウト、)それにいくつかのものを行う
私の質問:どのように私はプログラムプロセスのメモリ制限を設定し、親に知らせることができ、それを超えたら?プロセスはsigsegvで殺されるべきではありません、私は知りたい、プロセスはこのメモリ制限のために殺されました。 それが完了したら、このプロセスのメモリ使用量を取得する方法はありますか?プロセスが終了した後、最大使用メモリを比較することができます。
私は実行時間を遅くすることはできないため、valgrind(または類似のもの)を使用することはできません。
setrlimitは制限を適切に設定しますが、メモリをmallocして使用すると、プロセスがsigsegvを呼び出すため、待機状態になります。私はこれらを区別したい。 –
子が終了して待機した後、 'RUSAGE_CHILDREN'と一緒に' getrusage() 'を使って、子が使うリソースを数えます。 – caf
getrusageは素晴らしい機能ですが、 "常駐セットサイズ"は私に役立ちません(それは?)残りはLinuxでは使用されていません。 –