LINUX.ORG.RU

Асинхронная передача сообщений между двумя скриптами

 , ,


0

2

Доброго времени суток. Встал вопрос, как между двумя скриптами передать сообщение так, что бы один не ждал пока его прочитают (т.е. отправил и дальше пошел), а второй не ждал получения (т.е. посмотрел, если ничего нет - дальше пошел работать) ?

Ответ на: комментарий от yozan
#!/bin/sh
result="default result"
while true
do
   if timeout 1 cat input.fifo|read result; 
   then
      echo "Recive message: $result" 
      exit
   else
      echo "No message"
      sleep 2
   fi
done

На выходе получаю:

No message //тут я ничего еще не писал в файл
Recive message: default result // тут я уже записал в файл слово test

ЧЯДНТ?

RiseOfDeath ★★★★
() автор топика
Ответ на: комментарий от EugeneBas

Боюсь, что применение сторонних средств для моей задачи не рационально. Но все равно спасибо. Возможно пригодится в будущем.

RiseOfDeath ★★★★
() автор топика
Ответ на: комментарий от RiseOfDeath

Всем спасибо. Нашел решение.

#!/bin/sh
result="default result"
while true
do
   result=$(timeout 2 cat input.fifo)
   if (( ${#result} > 0 ))
   then
      echo "Recive message: $result" 
      exit
   else
      echo "No message"
      sleep 2
   fi
done
RiseOfDeath ★★★★
() автор топика

«input.fifo» был намёк, что это именованый канал. создаётся mkfifo. тогда while не нужен. cat сам будет ждать, когда в канале появятся данные, а timeout выкинет его через ,к примеру, секунду

yozan
()
Ответ на: комментарий от yozan

Это я понял. Просто получение сообщения - не единственная задача данного скрипта (в дальнейшем). Через pipe я планировал им «управлять».

RiseOfDeath ★★★★
() автор топика
Ответ на: комментарий от RiseOfDeath

А разве для сигналов не нужно знать pid?

разве тот кто запустил, не знает pid того, что запустил? Иди читай man bash про Coprocesses до полного просветления.

drBatty ★★
()
Ответ на: комментарий от RiseOfDeath

тогда файлы или сигналы. я не знаю, что лучше, но узнать pid действительно не проблема. Его в конце концов тоже можно сообщением отправить ☺

drBatty ★★
()
Ответ на: комментарий от UVV

Можно расчехлить fcntl O_NONBLOCK. Конечно, не сильно надежно, но для скриптоты может сойти.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.