Ограничения дочернего процесса Python

Я хотел бы создать процесс на Python (возможно, с подпроцессом и Popen), который должен иметь ограниченное время ЦП, ограниченные дочерние процессы и пропускную способность памяти. Я не могу найти способ сделать это. resource.setrlimit, похоже, не работает.

Мой код:

import os
import sys
import resource
import subprocess
import signal


def setlimits():
    os.seteuid(65534) # Has to run as root user in order to be able to setuid
    resource.setrlimit(resource.RLIMIT_CPU, (1, 1))
    resource.setrlimit(resource.RLIMIT_FSIZE, (500, 500))
    resource.setrlimit(resource.RLIMIT_NPROC, (80, 80))

p = subprocess.Popen( ["./exec.out"] , preexec_fn=setlimits )

person Paris    schedule 28.03.2012    source источник
comment
Подойдет ли вам это для вас?   -  person MrGomez    schedule 29.03.2012
comment
Чем не работает? Можете ли вы предоставить программу для десятистрочного репродуктора?   -  person sarnold    schedule 29.03.2012
comment
getcode.me/brkeo Вот мой код. Это даже не останавливает вечный цикл   -  person Paris    schedule 29.03.2012
comment
@Paris вы должны скопировать и отформатировать свой код прямо в своем вопросе.   -  person Zenon    schedule 29.03.2012
comment
Вы можете попробовать это, чтобы убедиться, что ограничения устанавливаются так, как вы ожидаете для подпроцесса p = subprocess.Popen( ["/bin/bash","-c","ulimit -a"] , preexec_fn=setlimits )   -  person Brian Swift    schedule 29.03.2012
comment
Кажется, действует для меня на osx   -  person jdi    schedule 29.03.2012
comment
Ну, я тоже запускаю его на OS X. Мой exec.out - это исполняемый файл из файла бесконечного цикла C: #include ‹stdio.h› int main () {while (1) printf (Hello \ n); } И программа не остановится, пока я не нажму Ctrl + C   -  person Paris    schedule 29.03.2012
comment
Все системные накладные расходы, связанные с printf("Hello\n), могут привести к тому, что программе потребуется много времени для накопления одной секунды процессорного времени. Попробуйте выполнять вычисления в бесконечном цикле вместо ввода-вывода.   -  person Brian Swift    schedule 29.03.2012