2 votes

Comment limiter un processus à utiliser X mémoire et T temps?

Je pense qu'une solution à ce problème est ulimit. Mais j'ai trouvé le code suivant dans domjudge, comment gèrent-ils cela, quelqu'un peut-il expliquer? Ils n'utilisent pas ulimit. Je ne suis pas bon en shell. Mais même votre petit aide peut dissiper mon doute.

# Exécute la commande sans trap d'erreur et vérifie le code de sortie
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

Script d'exécution :

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

Exécuter le programme en redirigeant l'entrée, la sortie et stderr

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

printf "$exitcode" >$EXITFILE

exit $exitcode

0voto

Jaap Eldering Points 101

Ulimit fonctionne à partir de la coquille (qui appelle en fait l'appel système ulimit).

Dans DOMjudge, les restrictions sont définies en utilisant le programme runguard. Si vous souhaitez en savoir plus, consultez le code source ou demandez sur la liste de diffusion DOMjudge

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X