
장치 파일 'debug_port'는 일부 포트의 출력입니다. 세 가지 스크립트가 있습니다.
첫 번째 스크립트는 포트에서 일부 정보를 기다리는 동시에 로그 파일에 데이터를 기록한 다음 로그 및 에코의 일부 grep을 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
장치 파일을 읽는 중입니다. 검색 불가능할 수도 있습니다. 단일 스트림일 수도 있습니다. 그렇다면 한 프로세스에서 읽는 것은 다른 프로세스에서 동일한 바이트를 읽는 것을 불가능하게 합니다. 따라서 두 프로세스를 동시에 읽어서는 안 됩니다.
이 작업을 수행해야 하는 경우 스트림을 분기해야 합니다. 데이터를 어딘가에 저장해야 하므로 더 많은 메모리 램/디스크(구현에 따라)가 사용될 수 있습니다. 메모리 사용 정도는 프로세스 간 위치에 따라 달라집니다.