프로세스 간 통신

김명주·2025년 1월 15일

프로세스 간 통신(IPC: Inter-Process Communication)

프로세스 간 통신은 서로 다른 프로세스들이 데이터를 교환하고 협력하는 메커니즘이다.

  1. 파이프 (Pipes)
  • 단방향 통신 채널로 주로 부모-자식 프로세스 간에 사용된다.
  • 명명된 파이프(FIFO)를 사용ㅇ하면 관련 없는 프로세스 간에도 통신이 가능하다
  • 예시 : ls | grep txt (ls 명령의 출력을 grep 명령의 입력으로 전달)
  1. 메시지 큐 (Message Queues)
  • 구조화된 데이터를 교환할 수 있어 복잡한 정보 전달에 적합하다.
  • 여러 프로세스가 동시에 읽고 쓸 수 있어 다중 프로세스 통신에 유용하다.
  • 주요 함수 : msgget() (생성/접근), msgsnd() (메시지 전송), msgrcv() (메시지 수신)
  1. 공유 메모리 (Shared Memory)
  • 가장 빠른 IPC 방식으로 대용량 데이터 교환에 효율적이다.
  • 여러 프로세스가 동시에 접근할 수 있어 세마포어 등의 동기화 메커니즘이 필요하다
  • 주요 함수: shmget() (생성/접근), shmat() (메모리 연결), shmdt() (메모리 분리)
  1. 소켓 (Sockets)
  • 네트워크를 통한 프로세스 간 통신을 지원한다.
  • 같은 시스템 내의 로컬 통신과 다른 시스템 간의 원격 통신 모두 가능하다.
  • 다양한 프로토콜을 사용할 수 있어 유연성이 높다
  1. 시그널 (Signals)
  • 비동기적 이벤트를 통지하는 방식으로 프로세스에 특정 상황을 알린다.
  • 제한된 양의 정보만 전달 가능하지만 프로세스 제어에 유용하다.
  • 예: SIGINT (인터럽트), SIGKILL (강제 종료), SIGSTOP (일시 중지) 등

특수한 프로세스 상태

  1. 좀비 프로세스
  • 실행 종료 후 부모가 wait() 호출로 상태를 수집하지 않은 프로세스
  • 시스템 리소스 사용 최소화, 단 PID 점유
  • ps 명령어에서 Z로 상태로 표시
  • 부모 프로세스 종료 시 init 프로세스가 정리
  1. 고아 프로세스
  • 부모 프로세스가 wait() 호출 없이 종료된 자식 프로세스
  • init 프로세스(PID 1)가 새 부모로 관리
  • 정상적 상황으로 시스템에 문제 없음
  1. 방지 방법
  • SIGCHLD 시그널 처리로 자식 프로세스 종료 시 wait() 호출
  • 더블 포크(double fork) 기법으로 데몬 프로세스 생성
    • 첫 번째 fork로 자식 프로세스 생성
    • 자식 프로세스가 다시 fork 하여 손자 프로세스 생성
    • 자식 프로세스는 즉시 종료, 손자 프로세스는 init의 자식이 됨.
profile
개발자를 향해 달리는 사람

0개의 댓글