Тайм-аут звучит как то, что вы ищете.
man timeout timeout - run a command with a time limit
по причинам отладки я хочу обнаружить одну из тех ошибок, появляющихся только изредка. Поэтому я хочу, чтобы код цикла в оболочке
Проблема здесь в том, что PID изменится. Можете ли вы дать мне подсказку, как это сделать? Я использую zsh, но другие оболочки тоже приветствуются!
Тайм-аут звучит как то, что вы ищете.
man timeout timeout - run a command with a time limit
Некоторое время этого не делали, но основная идея - заставить работающую оболочку отправить свой PID в именованный файл, прежде чем он начнет зацикливаться, а затем прочитать этот файл обратно с помощью отдельной программы-убийцы, на которой установлен таймер. Это не "сложно", но дьявол в деталях ...
Попробуйте скрипт bash здесь:
http://www.cyberciti.biz/faq/shell-scripting-run-command-under-alarmclock/
Он порождает сторожевой процесс, который знает PID подкоманды для запуска. Предостережение: в этом сценарии команда kill должна быть непосредственным потомком сценария.
#/usr/bin/env zsh for i in `seq 1 10`; do echo "start sleep"; sleep 30& LAST_CHILD=$! echo "PID\$!: "$LAST_CHILD; echo "wait for kill:" sleep 1 && kill -9 $LAST_CHILD; done
должен работать и с bash, но мне все еще нужно некоторое определение segfault, поэтому цикл прерывается.