Bash: Завершить при превышении времени ожидания / переполнении файла при выполнении команды - PullRequest
0 голосов
/ 13 апреля 2010

Я пишу скриптовый макет в bash. Предполагается выполнить программу на C, которая выдаст некоторый вывод (который я перенаправляю в файл.) Я пытаюсь (1) сделать это тайм-аут после определенной продолжительности, а также (2) прекратить, если выходной файл достигает определенного файла ограничение размера. Не уверен, как это сделать. Любая помощь? Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2010

Существует команда GNU coreutil timeout для тайм-аута.

Исследуйте ulimit -f 32, чтобы установить максимальный размер файла (до 16 КиБ; он считается в 512 байтных блоках).

Возражение:

ulimit [ не ] подходит, потому что мне нужно создавать и другие файлы. Мне нужно ограничить только один из них.

Счетчик: Если программа не должна создавать большой файл и маленький файл и вам нужно ограничить только маленький файл, вы можете использовать вспомогательную оболочку для хорошего эффекта:

(
ulimit -f 32
timeout 10m -- command arg >file
)

Ограничение на размер файла ограничено командами в вложенной оболочке (которая отмечена парой скобок).

0 голосов
/ 14 апреля 2010

Запускается yourcommand , перенаправляя вывод через dd на youroutputfile и накладывая на него ограничение в 10000000 байт: dd завершится и SIGPIPE будет отправлен на yourcommand

yourcommand | dd of=youroutputfile bs=1 count=10000000 &

Это будет ждать 5 секунд и убить вашу команду , если еще не завершено:

sleep 5
kill %yourcommand
0 голосов
/ 13 апреля 2010

вы можете использовать команду timeout, например,

timeout -s 9 5s ./c_program > file

чтобы проверить размер файла, вы можете указать файл, а затем сделать if/else

limit=1234 #bytes
size=$(stat -c "%s" file)
if [ "$size"  -gt "$limit" ] ;then
  exit
fi

см. Также здесь , если вы не можете использовать эти инструменты GNU, или здесь для некоторых других идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...