他の人からのコードを評価するスクリプトを準備しているので、実行環境をできるだけ制限する必要があります。
スクリプトは、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 ライブラリを実行できません。