프로세스 간 통신: 파이프

3537 단어 unixlinux
IPC 방법을 배운 후에는 또 다른 IPC 접근 방식인 파이프를 분석할 시간입니다.


다음 예를 요약해 보겠습니다.

$ echo 'my precious' > rawcontent.txt
$ base64 < rawcontent.txt


  • 프로그램echo이 리디렉션된 STDOUT
  • 으로 데이터를 보냅니다.
  • echo 출력이 프로그램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 소켓을 다룰 것입니다.

    좋은 웹페이지 즐겨찾기