blo
@blo
инженер-программист

Bash, trap сигнала?

Есть простенький скрипт
#!/bin/bash

trap 'echo Catched' TERM

echo $$

#cat /dev/zero | 
while true ; do
    sleep 1
done



Все работает — после запуска скрипта посылаю ему сигнал TERM
kill -TERM [PID]

trap ловит этот сигнал и выводит «Catched».


Однако если раскомментировать строку
cat /dev/zero |

то trap уже ничего не ловит и не завершает скрипт, т.е. абсолютно ничего не происходит.


Собственно вопрос — возможно ли внутри такого bash скрипта словить сигнал? Если да — то как?

UPD. Решение

#!/bin/bash

trap 'echo Catched' TERM

echo $$

cat /dev/zero | 
while true ; do
    sleep 1
done &

while : ; do
    wait $!
done
  • Вопрос задан
  • 8356 просмотров
Решения вопроса 1
sledopit
@sledopit
man bash:
If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes. When bash is waiting for an asynchronous command via the wait builtin, the reception of a signal for which a trap has been set will cause the wait builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed.

По идее, wait вас может спасти.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
shadowalone
@shadowalone
А Вы пробовали другую команду, которая не висит в ожидании как
cat /dev/zero |
?
Ответ написан
@Speakus
Senior iOS developer
думаю это ваш случай
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы