Петля: начните программу и убейте после времени вне

по причинам отладки я хочу, чтобы обнаружить одну из этих ошибок, появляющихся только время от времени. Поэтому я хочу закодировать цикл while в оболочке

  • запуск программы (если она будет segfault => это то, что я хочу)
  • убить программу после определенного тайм-аута (например, несколько секунд)

проблема в том, что PID изменится. Можете ли вы дать мне подсказку о том, как это сделать?
Я использую zsh, но другие оболочки тоже приветствуются!

29
задан math
27.02.2023 6:32 Количество просмотров материала 3115
Распечатать страницу

4 ответа

Timeout звучит как то, что вы ищете.

man timeout
timeout - run a command with a time limit
4
отвечен Ole Tange 2023-02-28 14:20

не делали этого некоторое время, но основная идея состоит в том, чтобы заставить запущенную оболочку отправить PID в именованный файл, прежде чем он начнет цикл, а затем прочитать этот файл обратно с отдельной программой-убийцей, на которой есть таймер. Это не "сложно", но дьявол кроется в деталях...

1
отвечен hotei 2023-02-28 16:37

попробуйте скрипт bash здесь:

http://www.cyberciti.biz/faq/shell-scripting-run-command-under-alarmclock/

это порождение процесса watchdog, который знает PID выполняемой подкоманды. Нюанс: в этом скрипте команду убивать должен быть в сценарии.

1
отвечен Rich Homolka 2023-02-28 18:54
#/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, поэтому цикл прерывается.

0
отвечен math 2023-02-28 21:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх