Необходимо автоматизировать нажатие Ctrl+C
На моём VDS сервере я сканирую диапазон ip адресов но бывает такое что некоторые адреса вызывают проблему и программа останавливается и вывод какой либо информации в консоль прекращается, в таком случае для того чтобы перейти к следующему адресу необходимо нажать Ctrl+C. Возможно ли написать bash-скрипт который в такой ситуации пропустит проблемный адрес?
Ответы (2 шт):
Ctrl-C посылает процессу сигнал SIGINT, так что программно это можно сделать так:
kill -SIGINT $PID
Тут $PID - идентификатор процесса.
Уже написали что Ctrl+C, отправляет сигнал SIGINT, код сигнала 2
(kill -l - возможные сигналы)
Для автоматизации ожидания определенного времени в командах в которых это не предусмотрено существует команда timeout которая по истечению указанного времени отправит нужный сигнал запущенному процессу.
Синтаксис такой:
timeout -s<сигнал> <время ожидания выполнения> <Команда>
Для примера:
#Гарантированно будет отправлен сигнал SIGINT, так как установлено врем ожидания 3, на команду sleep ожидающую 5 секунд
timeout -s2 3 sleep 5
...
Проверить что команда завершилась по истечению таймаута можно через код возврата, по умолчанию он будет равен 124
...
[ $? -eq 124 ] && { echo "Процесс завершился по таймауту"; }