Поймать SIGINT в Bash, обрабатывать И игнорировать
Возможно ли в bash перехватить SIGINT, сделать что-то, а затем проигнорировать это (продолжайте работу bash).
Я знаю, что могу игнорировать SIGINT с
trap '' SIGINT
И я могу также сделать что-то на подписи с
trap handler SIGINT
Но это все равно остановит сценарий послеhandler
выполняет. Например.
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
Когда я нажимаю Ctrl + C, SIGINT для программы будет отправлено, но Bash пропуститwait
ДО того, как программа была должным образом закрыта и создала свой вывод в своем обработчике сигнала.
Используя ответ @suspectus, я могу изменитьwait $PID
чтобы:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Это на самом деле работает для меня, я просто не уверен на 100%, если это «чистый» или «грязный обходной путь».