nixp.ru v3.0

28 мая 2017,
воскресенье,
00:08:19 MSK

DevOps с компанией «Флант»
propeller написал 8 июля 2006 года в 00:30 (346 просмотров) Ведет себя как мужчина; открыл 53 темы в форуме, оставил 158 комментариев на сайте.

вероятно вопросик групый, но времени разобраться нет никакого, а сделать надо.

как мне в bash скрипте (а именно в /etc/init.d/any_script) считать целиком фифо канал и тут же эту затею бросить, просто опустошить то, что туда уже набито. надо просто убедиться, что программа, которая будет сейчас запущена (а она читает этот фифо канал) не будет перелопаичвать того, что там уже есть.

Genie

man bash

okolo operatora read

U nego, Vrode by, est' opciya taimauta

while read …

do …

done < fifo

mozhet pomozhet

Feuerbach

Может я чего не понял, но почему бы не

cat fifo > /dev/null

?

Genie

а вообще-то… этттаа

«man 4 fifo» гласит:

The FIFO must be opened on both ends (reading and writing) before data can be passed. Normally, opening the FIFO blocks until the other end is opened also.

таким образом, там ничего быть не может ;)

т.е. оно может быть так, что какой-то процесс пытался что-то в pipe запихнуть, да только если пихнуть некому — будет висеть, пока не помрёт или не нйдётся кто-то, кто будет готов его выслушать.

propeller
Genie
man bash

okolo operatora read

U nego, Vrode by, est' opciya taimauta



read -t $timeout

большое спасибо

cat fifo > /dev/null нескоро бы остановился

Feuerbach
propeller
cat fifo > /dev/null нескоро бы остановился

Это как, простите?

propeller

это фифо канал. пока в него пихают этот cat и будет перенаправлять в никуда. так что представленная команда дает бесконечно долгую операцию.

Feuerbach

Дык ты же сам просил «целиком» :)

А если хочешь быстро, то head -c 0 fifo откроет и закроет fifo, послав пишущей туда программе SIGPIPE и, вероятно, прибив ее.

Просто до сих пор не могу понять, чего ты хочешь и как фишка с таймаутом может быть здесь полезна.