Por que meu roteiro está sendo "morto"? Como evito isso?

4

Eu escrevi um script bash para testar programas C escritos em um test-suite. Por alguma razão, o roteiro está sendo morto depois de um tempo. Eu sou um novato em bash scripting e até agora não encontrou o motivo. Aqui está o roteiro.

#!/bin/bash
ulimit -t 1
tests_dir=tests
run_dir=tests
find . -name "*.c" | while read cfile; do rm a.out &> /dev/null; gcc "$cfile" -lm -w &> /dev/null;
if [ ! -f a.out ]; 
then 
    echo "$cfile did-not-compile" >> "$run_dir/results.out";
else
    find "$tests_dir" -name "in*.txt" | while read testin; do echo "running $testin on $cfile"; 
    rm test.out &> /dev/null; 
    rm space_less_testout &> /dev/null;
    LD_PRELOAD=../../EasySandbox/EasySandbox.so ./a.out < $testin | grep -v "entering SECCOMP mode" &> test.out;
    if [ -e test.out ]; then
            testout=${testin/in/out}
            tr -d '\n' < $testout | tr -d ' ' > space_less_testout
            echo -e '\n' >> space_less_testout

            if diff -qwB "$testout" test.out &> /dev/null
            then
                    # if no difference then takes true brance (based on return value)
                    echo "$cfile ;passed-on-test; $testin" >> "$run_dir/results.out"; echo "passed-on-test $testin";
            elif diff -qB space_less_testout test.out &> /dev/null 
            then
                    # or no difference with new-line removed should-be-output (just a formatting error)
                    echo "$cfile ;passed-on-test; $testin" >> "$run_dir/results.out"; echo "passed-on-test $testin";
            else
                    echo "$cfile ;failed-on-test; $testin" >> "$run_dir/results.out"; echo "failed-on-test $testin";
            fi
    fi
done;
fi
done;
    
por rahuL 09.06.2017 / 17:21

1 resposta

14

ulimit -t 1 limita o tempo de CPU do script a 1 segundo. Quando o script consumiu todo o tempo de CPU, ele é eliminado.

Para limitar o tempo de CPU de apenas um comando em seu script, você pode usar parênteses para iniciá-lo em uma subshell com seu próprio limite, por exemplo,

(ulimit -t 1; LD_PRELOAD=../../EasySandbox/EasySandbox.so ./a.out < $testin) 
    
por Florian Diesch 09.06.2017 / 17:37

Tags