장치 파일 "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
장치 파일을 읽는 중일 때. 검색이 불가능할 수도 있습니다. 단일 스트림입니다. 그렇다면 한 프로세스에서 읽으면 다른 프로세스가 동일한 바이트를 읽지 못하게 됩니다. 따라서 동시에 두 프로세스에서 읽어서는 안 됩니다.
이 작업을 수행해야 하는 경우 스트림을 분기해야 합니다. 데이터를 어딘가에 저장해야 하므로 구현에 따라 더 많은 메모리 RAM/디스크를 사용할 수 있습니다. 메모리 사용량은 프로세스 간의 관계에 따라 달라집니다.