파이프는 기본적으로 단방향 통신이며 fork()로 자식 프로세스를 만들었을 때 부모/자식 간 통신을 가능하게 한다.
다음 예제에서 볼 수 있는 것처럼 fork()를 통해 자식 프로세스를 생성하며 부모 프로세스에는 실제 ID(Integer)값이 들어가며 자식 프로세스에는 0이 들어간다. 이를 통해 구분이 가능하며 fd[1]에서 write, fd[0]에서 read가 가능하다.
메세지 큐도 큐이기 때문에 기본적으로 FIFO 방식으로 데이터를 전송한다. 프로세스 제한 없이 어느 프로세스와도 데이터 송/수신이 가능하다.
두 IPC 기법의 차이는 다음과 같다.
두 기법의 공통점은 kernel 공간의 메모리를 사용한다는 점이다.
공유메모리는 kernel space에 메모리 공간을 확보하고 해당 공간을 변수처럼 쓰는 형식이다. 공유 메모리 키를 가지며 여러 프로세스가 접근 가능하다는 특징이 있다.
유닉스에서 30년 이상 사용된 전통적인 기법으로 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생했는지 알려준다. 프로세스 관련 코드에 해당 시그널 핸들러를 등록하여 다음과 같이 시그널을 처리한다.
시그널 핸들러 등록 및 핸들러 구현
소켓은 네트워크 통신을 위한 기술이며 기본적으로 클라이언트와 서버 등 두 개의 다른 컴퓨터 간 네트워크 기반 통신을 위한 기법이다.
하지만 소켓을 하나의 컴퓨터 안에서 두 개의 프로세스 간 통신 기법으로도 사용이 가능하다.