Я пытаюсь запустить программу в бесконечном цикле, потому что она иногда умирает без причины. Я хотел бы иметь возможность ударить Ctrl-C, чтобы предотвратить перезапуск программы.Как захватить Ctrl-C и использовать его, чтобы закончить бесконечный цикл
Я не хочу, чтобы Ctrl-C убивал программу, просто чтобы подождать, пока она не умрет, а затем не перезапустите ее снова.
theprogram
- это винная программа (utorrent).
Бонусные баллы за то, что рассказали мне, как сделать так, чтобы он безопасно выходил из theprogram
, точно так же, как нажимать на «х» в правом верхнем углу. Когда я вручную kill
его из командной строки или нажав Ctrl-C, он не сможет запустить свой код очистки. Поэтому моя попытка просто остановить его перезапуска.
Я проверил несколько других вопросов об улавливании SIGINT, но я не мог понять, как это сделать.
Может ли кто-нибудь исправить этот код? Мой код, кажется, убивает theprogram
, затем выходим из цикла, когда нажата комбинация Ctrl-C, не позволяя theprogram
очистить.
#!/bin/bash
EXIT=0
trap exiting SIGINT
exiting() { echo "Ctrl-C trapped, will not restart utorrent" ; EXIT=1;}
while [ $EXIT -eq 0 ] ; do
wine theprogram
echo "theprogram killed or finished"
date
echo "exit code $?"
echo "sleeping for 20 seconds, then restarting theprogram..."
sleep 20
done
echo "out of loop"
ваша ловушка работает ... Я бы поставил определение функции перед установкой ловушки, хотя. Возможно, вы должны добавить элементы очистки ** внутри ** функцию обработчика ловушек? но у вас будут случаи, когда он не вызывается во время работы программы ... поэтому вам нужно будет убедиться, что он правильно обработан. –
, и вам может быть сложно отказаться от использования «ctrl-C» для копирования (/ Paste) в этой винной программе? ... И знать, делали вы это или нет. кажется странным способом обработки перезапуска. Вы можете настроить ловушку для одного, если сигналы SIGUSR и «kill -SIG .... pid» (или у вас есть кнопка/скрипт, который делает это для вас) вместо –
http://www.cons.org/cracauer/ sigint.html показывает, как работает SIGINT (и различные способы взаимодействия оболочек в зависимости от их режимов) –