프로세스 간 통신: 파이프
다음 예를 요약해 보겠습니다.
$ echo 'my precious' > rawcontent.txt
$ base64 < rawcontent.txt
echo
이 리디렉션된 STDOUTecho
출력이 프로그램base64
의 리디렉션된 STDIN으로 사용됩니다.여기서 패턴에 주목하십시오. 첫 번째 프로그램의 출력이 두 번째 프로그램의 입력에 "인큐"되는 데이터 변환 파이프라인처럼 보입니다.
유닉스 파이프라인
UNIX 계열 시스템은 파이프라인이라는 IPC용 메커니즘을 제공합니다.
이러한 문장을 여러 줄로 작성하는 대신 OS에서는 프로그램 사이에 연산자
|
를 사용하여 전체 문장을 한 줄로 작성할 수 있습니다.$ echo 'my precious' | base64
bXkgcHJlY2lvdXMK
이 파이프 물건을 다른 곳에서 본 적이 있습니다. 맞습니까?
anonymous pipe 이라고 합니다.
익명 파이프
익명 파이프는 단방향 IPC를 위해 FIFO(선입선출) 통신 채널을 사용합니다.
단방향이란 데이터가 한 방향으로만 흐른다는 뜻입니다. 데이터가 전이중 방식으로 양방향으로 흐르는 양방향 통신의 반대입니다.
$ ps ax | grep docker | tail -n 3
62374 s039 S+ 0:05.31 /usr/local/bin/com.docker.cli run -it ubuntu bash
65442 s040 S+ 0:02.93 docker run -it ubuntu bash
65445 s040 S+ 0:02.86 /usr/local/bin/com.docker.cli run -it ubuntu bash
파이프(
|
)가 생성되면 하나는 쓰기용으로, 다른 하나는 읽기용으로 파일 설명자 쌍을 엽니다.파이프는 익명이기 때문에 두 파일 설명자는 프로세스가 있는 동안만 지속되므로 두 프로세스가 모두 종료되면 자동으로 닫힙니다.
명명된 파이프
익명 파이프와 유사하게 명명된 파이프도 단방향 IPC용 FIFO(선입선출) 통신 채널을 사용합니다.
주요 차이점은 명명된 파이프가 프로그램을 사용하여 명시적으로 생성된다는 점입니다
mkfifo <filename>
. 그런 다음 파일 시스템의 단일 파일이 생성되어 한 프로세스에서 읽고 다른 프로세스에서 쓰기 위해 열립니다.$ mkfifo myqueue
myqueue라는 파일이 생성됩니다. 그러면 판독기 프로세스가 파이프를 열 수 있습니다.
$ cat myqueue
메시지가 파이프에 도착할 때까지 프로세스가 차단된 상태로 유지됩니다.
한편 다른 프로세스는 파이프에 쓸 수 있습니다.
# The echo message STDOUT is being redirected to the pipe, because it's a file!
$ echo 'some message' > myqueue
이제 독자 프로세스에 도착하는 메시지를 살펴보십시오.
$ cat myqueue
some message
명명된 파이프는 바인딩된 프로세스 외부에 있으므로 사용하지 않을 때 수동으로 제거해야 합니다.
rm myqueue
예이!
결론
이 기사에서 우리는 UNIX 계열 시스템이 IPC에 파이프를 사용하는 방법을 배웠습니다.
기본적으로 파이프는 IPC의 단방향 통신 채널입니다.
익명 파이프는 한 쌍의 파일 설명자를 사용하며 프로세스가 완료되면 자동으로 닫힙니다.
명명된 파이프는 파일 시스템의 명명된 파일을 사용하며 더 이상 사용하지 않을 때 수동으로 닫아야 합니다.
IPC에 대해 좀 더 이해할 수 있기를 바랍니다. 다음 게시물에서는 프로세스 간 통신을 위한 UNIX 소켓을 다룰 것입니다.
Reference
이 문제에 관하여(프로세스 간 통신: 파이프), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leandronsp/inter-process-communication-pipes-52nj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)