Почему мой скрипт bash получает & ldquo; Killed & rdquo ;? Как я могу это предотвратить?

Я написал скрипт bash для тестирования написанных на языке C программ на тестовом наборе. По какой-то причине сценарий становится убитым через некоторое время. Я новичок в сценариях bash и до сих пор не нашел причины. Вот сценарий.

#!/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;
4
задан 9 June 2017 в 18:21

3 ответа

ulimit -t 1 ограничивает время процессора процессором до 1 секунды.

Чтобы ограничить время процессора только одной командой в вашем скрипте, вы можете использовать круглые скобки, чтобы запустить его в подоболочке с собственным пределом, например

(ulimit -t 1; LD_PRELOAD=../../EasySandbox/EasySandbox.so ./a.out < $testin) 
14
ответ дан 22 May 2018 в 21:42
  • 1
    Но как я могу ограничить время выполнения кода ученика? Я попытался установить ограничение на 1 секунду до выполнения тестового случая и увеличить его снова. Но увеличение ulimit -t не допускается. – rahuL 9 June 2017 в 19:06
  • 2
    Добавил это к моему ответу. – Florian Diesch 9 June 2017 в 19:32

ulimit -t 1 ограничивает время процессора процессором до 1 секунды.

Чтобы ограничить время процессора только одной командой в вашем скрипте, вы можете использовать круглые скобки, чтобы запустить его в подоболочке с собственным пределом, например

(ulimit -t 1; LD_PRELOAD=../../EasySandbox/EasySandbox.so ./a.out < $testin)
14
ответ дан 18 July 2018 в 11:54

ulimit -t 1 ограничивает время процессора процессором до 1 секунды.

Чтобы ограничить время процессора только одной командой в вашем скрипте, вы можете использовать круглые скобки, чтобы запустить его в подоболочке с собственным пределом, например

(ulimit -t 1; LD_PRELOAD=../../EasySandbox/EasySandbox.so ./a.out < $testin)
14
ответ дан 24 July 2018 в 19:52

Другие вопросы по тегам:

Похожие вопросы: