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