2

他の人からのコードを評価するスクリプトを準備しているので、実行環境をできるだけ制限する必要があります。

スクリプトは、psutil とサブプロセスを使用して python3.4 で開発されています。実行するターゲット ファイルはコンパイル済みの C++ コードであり、避けるべきすべてのもの (非常に大きなメモリ割り当て、高い CPU 使用率、フォークの作成など) を含んでいます。

ドキュメントとして、私はこのページこのリポジトリこのチュートリアルを読みましたが、それでも、python からプロセスを呼び出すと、課された制限を無視しているようです。

私のスクリプトを実行する命令:

PROC = subprocess.Popen(["sleep 1 ; ./local_tmp/test"], shell=True, preexec_fn=preExecFunction)

なぜ1を眠るのですか?この質問によれば、プロセスは制限なしで呼び出される可能性があるため、スリープを遅らせて、Pythonがすべてのプロセスを制限する時間を与えています。

preExecFunction は何をしていますか? 基本的に、Pythonでリソースのsetrlimit関数を呼び出すことで環境を制限しています(私が与えた最初のリンクのドキュメント)

CPP コードのセグメント:

struct rlimit rl;
getrlimit (RLIMIT_NPROC, &rl);
printf("Default value is : %lld\n", (long long int)rl.rlim_cur);
int pid = fork();
printf("Default value is : %lld\n", (long long int)rl.rlim_cur);
printf("%d\n",pid);

CPP コードの出力

Default value is : 0
Default value is : 0
31670

与えられた助けは大歓迎です。ありがとう!

edit : root ユーザーとして python スクリプトを実行しています。そうしないと、psutil ライブラリを実行できません。

4

0 に答える 0