如何限制一个进程使用X内存和T时间?

如何限制一个进程使用X内存和T时间?

我认为解决这个问题的一个办法是限制。但我在 domjudge 中发现了以下代码,有人能解释一下他们是如何处理这个问题的吗?他们没有使用 ulimit。我不擅长 shell。但你的一点帮助仍然可以消除我的疑虑。

# Runs command without error trapping and check exitcode
runcheck ()
{
set +e
$@
exitcode=$?
set -e
}

runcheck $GAINROOT $RUNGUARD ${DEBUG:+-v} ${USE_CHROOT:+-r "$PWD"} -u "$RUNUSER" \
-t $TIMELIMIT -m $MEMLIMIT -f $FILELIMIT -p $PROCLIMIT -c -o program.time -- \
$PREFIX/run $PREFIX/$PROGRAM \
testdata.in program.out program.err program.exit \
>error.tmp 2>&1

运行脚本:

PROGRAM="$1";   shift
TESTIN="$1";    shift
OUTPUT="$1";    shift
ERROR="$1";     shift
EXITFILE="$1";  shift

运行程序时重定向输入、输出和 stderr

$PROGRAM <$TESTIN >$OUTPUT 2>$ERROR
exitcode=$?

printf "$exitcode" >$EXITFILE

exit $exitcode

答案1

Ulimit 从 shell 工作(实际上调用ulimit系统调用)。

在 DOMjudge 中,限制是使用程序设置的runguard。如果您想了解更多详细信息,请参阅源代码,或在DOMjudge 邮件列表

相关内容