IPC

IPC는 서로 다른 프로세스가 데이터를 주고받거나 작업 순서를 맞추는 방법이다. 같은 컴퓨터 안에서도 프로세스의 주소 공간은 기본적으로 분리되어 있으므로, 별도의 통신 수단이 필요하다.

데이터의 흐름에 맞춰 고르기

방식 적합한 흐름 함께 고려할 것
파이프 한 명령의 출력을 다음 명령으로 전달 바이트 스트림이며 메시지 경계는 별도로 다뤄야 함
Unix domain socket 같은 호스트의 클라이언트·서버 통신 소켓 경로와 접근 권한
공유 메모리 여러 프로세스가 큰 데이터를 같은 영역에서 참조 동기화와 데이터 수명
메시지 큐 메시지 단위로 보내고 받기 큐 용량과 송수신 실패 처리

세마포어는 주로 공유 자원 접근을 조율하는 도구다. 데이터 자체를 전달하는 방식과 동기화 수단은 구분한다. 공유 메모리를 선택했다고 경쟁 상태까지 해결되는 것은 아니다.

파이프에서 EOF가 전달되는 조건

printf '%s\n' first second | wc -l

출력은 2다. printf가 데이터를 쓴 뒤 쓰기 쪽을 닫으면, 읽는 쪽은 남은 데이터를 소비하고 EOF를 확인한다. 파이프를 사용하는 프로그램이 끝나지 않는다면 다른 프로세스가 쓰기 파일 디스크립터를 계속 열고 있는지도 확인한다.

SSH Agent도 로컬 IPC다

SSH 클라이언트는 Agent 소켓으로 서명을 요청할 수 있다. 개인 키 파일을 매번 읽는 것과 다르다. 따라서 SSH_AUTH_SOCK이 잘못된 소켓을 가리키면 Agent 프로세스가 실행 중이어도 키를 사용할 수 없다. 1Password 다중 계정 구성에서 이 문제를 실제 설정과 연결해 설명한다.

자료: pipe(7), unix(7), shm_overview(7)