Bash.
Создаю канал ввода/вывода через mkfifo.
Один процесс пишет: echo string > pipe
Другой читает: read var <pipe
Как грамотно прервать процесс, если противоположный так и не начал работать?
Например: read -t 3 var <pipe - не работает.
А например:
echo string > pipe & pid=$!
while pgrep $pid && [ $(( c++ )) -eq 3 ] ; do sleep 1 ; done ; pkill $pid
как-то сильно громоздко.
Может есть какие-то более правильные методы?
Bash: FIFO канал - прервать чтение/запись
Модератор: Модераторы разделов
-
inspirra
- Сообщения: 211
- ОС: FreeBSD, Gentoo
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
-
inspirra
- Сообщения: 211
- ОС: FreeBSD, Gentoo
Re: Bash: FIFO канал - прервать чтение/запись
2 Rootlexx
Вот спасибо! Работает! Хотя и не совсем укладывается в голове, почему таймаут не работает напрямую из файла, не через дескриптор.
А с пишущим процессом вероятно уже без внешнего убийства не обойтись?
Вот спасибо! Работает! Хотя и не совсем укладывается в голове, почему таймаут не работает напрямую из файла, не через дескриптор.
А с пишущим процессом вероятно уже без внешнего убийства не обойтись?
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Bash: FIFO канал - прервать чтение/запись
Можно попробовать так:
Код: Выделить всё
echo string | dd bs=1 oflag=nonblock status=noxfer of=каналМожно ещё попытаться перехватывать SIGPIPE, если он приходит.
Кроме того, если использовать внешнее завершение, то для этого есть специальная программа: timeout.