Возможно ли в bash перехватить SIGINT, сделать что-то, а затем проигнорировать его (сохранить bash работает).
Я знаю, что я могу игнорировать SIGINT с помощью
trap '' SIGINT
И я также могу сделать что-то на сигнете с помощью
trap handler SIGINT
Но это все равно остановит script после выполнения 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
. Программа BEFORE была правильно отключена и создала свой вывод в своем обработчике сигналов.
Используя ответ @suspectus, я могу изменить wait $PID
на:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Это действительно работает для меня. Я просто не уверен на 100%, если это "чистый" или "грязный обход".