python — Форкинг, когда setrlimit уже был установлен в 0?

Я готовлю сценарий для оценки некоторого кода, поступающего от других людей, поэтому мне нужно максимально ограничить среду исполнения.

Сценарий разработан под python3.4 с использованием psutil и подпроцесса, целевой файл для запуска — это скомпилированный код C ++ со всем, чего мне следует избегать (очень большое выделение памяти, высокая загрузка ЦП, создание форка и т. Д.).

Как документация, я прочитал эта страница а также этот репозиторий а также этот урок, но тем не менее, когда я вызываю процесс из python, он, кажется, игнорирует любое ограничение.

Инструкция, которая выполняет мой скрипт:

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

Зачем спать 1? Потому что согласно этот вопрос процесс может быть вызван без ограничений, поэтому я ставлю режим сна, чтобы задержать его и дать время питону ограничить весь процесс.

Что делает preExecFunction? В основном это ограничение среды с помощью вызовов функции setrlimit ресурса в python (документ в первой ссылке, которую я дал)

Сегмент кода 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

Любая помощь будет принята с благодарностью. Спасибо!

редактировать : Я запускаю скрипт python от имени пользователя root, потому что иначе я не могу запустить библиотеку psutil.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]