소비자를 닫는 올바른 방법

소비자를 닫는 올바른 방법

간단한 파이프라인이 있다고 가정해 보겠습니다.

set -eo pipefail;
echo 'foo' | cat

cat언제 그만둬야 할지 어떻게 알 수 있나요 ? STDIN 스트림이 끝날 때인가요, 아니면 cat신호가 수신될 때인가요? 내 예에서 생산자 프로세스는 SIGINT를 수신한 다음 코드 1로 종료했습니다. 그렇다면 (소비자 프로세스)는 cat생산자 프로세스가 어떤 종료 코드로 종료되었는지 어떻게 알 수 있습니까?

답변1

cat모른다는 징후 echo. 각 파일 끝 조건을 수신합니다.인적관리(7):

파이프의 쓰기 끝을 참조하는 모든 파일 설명자가 닫힌 경우 파이프에서 read(2)를 시도하면 파일 끝이 표시됩니다(read(2)는 0을 반환함).

그러나 파이프 작성자에게는 SIGPIPE가 있습니다. 동일한 매뉴얼 페이지를 참조하십시오

관련 정보