
Файл устройства 'debug_port' — это вывод некоторого порта. У меня есть три скрипта:
Первый скрипт ожидает некоторую информацию из порта и в то же время регистрирует данные в файле журнала, а затем выполняет свою работу, выполняя grep из журнала и echos в debug_port.
#first.sh
pkill cat
cat debug_port > $logfile1 &
running=$!
# perform its tasks...
kill $running
killall -s SIGPIPE cat
pkill -P $$
rm $logfile1
Второй ждет какой-то другой информации и выполняет другую работу.
#second.sh
pkill cat
cat debug_port > $logfile2 &
running=$!
# <<< there is problem: no output from 'debug_port'
# perform its tasks...
kill $running
rm $logfile2
И вызывающий абонент вызывает их обоих последовательно
#caller.sh
./first.sh
./second.sh
Проблема в том, что у меня нет вывода от 'debug_port' во втором скрипте. Однако я уверен, что он должен быть.
решение1
Поскольку вы читаете файл устройства. Возможно, что он не доступен для поиска: это один поток. Если это так, то чтение из одного процесса будет препятствовать чтению того же байта другим процессом. Поэтому вам не следует читать двумя процессами одновременно.
Если вам это нужно, то вам нужно разветвить поток. Это может привести к использованию большего объема памяти ram/диска (в зависимости от реализации), поскольку данные должны где-то храниться. Объем использования памяти будет зависеть от расположения процессов.