귀하의 질문에 대해 잘못 된 유일한 것은 당신이 말하는 것입니다.
A가 먼저 실행되면 B는 A의 표준을 얻습니다.
실제로 두 프로그램은 거의 동시에 시작됩니다. B
읽을 때 입력이 없으면 읽을 입력이있을 때까지 차단됩니다. 마찬가지로에서 출력을 읽는 사람이 없으면 A
출력을 읽을 때까지 쓰기가 차단됩니다 (일부는 파이프에 의해 버퍼링 됨).
파이프 라인에 참여하는 프로세스를 동기화하는 유일한 것은 I / O, 즉 파이프를 통한 읽기 및 쓰기입니다. 쓰거나 읽지 않으면 두 프로세스가 서로 독립적으로 실행됩니다. 하나가 다른 쪽의 읽기 또는 쓰기를 무시하면 무시 된 프로세스는 차단되고 결국 SIGPIPE
다른 프로세스가 종료 될 때 신호에 의해 종료되거나 (쓰기중인 경우) 표준 입력 스트림에서 파일의 끝 조건 (읽기 경우)을 얻습니다. .
관용적 인 설명 A | B
은 두 개의 프로그램이 포함 된 파이프 라인이라는 것입니다. 첫 번째 프로그램에서 표준 출력으로 생성 된 출력은 두 번째로 표준 입력에서 읽을 수 있습니다 ( "[출력] A
은 [입력] B
" 으로 파이프됩니다 ). 쉘은이를 위해 필요한 배관 작업을 수행합니다.
"소비자"와 "제작자"라는 단어를 사용하려면 괜찮다고 생각합니다.
이것들이 C로 작성된 프로그램이라는 사실은 관련이 없습니다. 이것이 Linux, macOS, OpenBSD 또는 AIX라는 사실은 관련이 없습니다.