mkfifo를 이용한 IPC

mkfifo를 이용한 IPC

DevOps
mkfifo를 이용한 IPC
Author

gabriel yang

Published

November 15, 2023

mkfifo를 이용한 IPC

mkfifo 명령어는 리눅스 시스템에서 FIFO(First In, First Out) 파일을 생성하는 데 사용됩니다. FIFO는 프로세스 간 통신을 위한 특별한 파일 유형으로, 한 프로세스가 데이터를 쓰면 다른 프로세스가 그 데이터를 읽을 수 있습니다.

FIFO 파일 생성 및 IPC 테스트

mkfifo명령을 FIFO 파일을 생성합니다. pipe라는 이름으로 FIFO 파일을 생성했습니다.

mkfifo pipe

이제 pipe파일을 사용해서 프로세스간 통신을 구현할 수 있습니다. 한 프로세스에서 데이터를 쓰고 다른 프로세스에서 데이터를 읽을 수 있습니다. 새로운 터미널을 생성하고 각 터미널에서 아래의 명령을 수행합니다.

# 터미널 1
echo "Hello" > pipe

# 터미널 2
cat pipe
Hello

터미널 2번에서 다른 프로세스에서 전달한 Hello를 확인할 수 있습니다.

생성한 파이프를 이용해서 명령어 수행하기

터미널 2번에서 전달받은 명령을 실행하는 연습을 합니다. ls명령을 파이프를 이용하여 다른 프로세스로 전달하고 명령을 실행합니다.

# 터미널 1
echo "ls" > pipe

# 터미널 2
eval "$(cat pipe)"
README.md  pipe

명령을 전달받은 프로세스에서는 eval을 사용하여 명령을 수행합니다. 다른 프로세스에서 전달된 ls명령이 실행됩니다.

파이프에 전달받은 명령을 계속 읽기

명령을 읽어서 실행하는 과정을 계속 진행할 수 있도록 while을 사용합니다.

# 터미널 1
echo "ls -al" > pipe

# 터미널 2
while true; do eval "$(cat pipe)"; done
drwxr-xr-x 6 root root 4096 11월 15 23:04 .
drwxr-xr-x 4 root root 4096 11월 13 23:48 ..
-rw-r--r-- 1 root root   14 11월 13 23:43 README.md
prw-r--r-- 1 root root    0 11월 15 23:06 pipe

터미널 2에서 전달 받은 ls -al명령이 실행됩니다. 실행 결과를 파일로 저장하기 위해서 아래의 명령을 사용할 수 있습니다.

while true; do eval "$(cat pipe)" &> result.log; done

이제 명령을 전달하면 실행결과가 result.log파일에 저장됩니다.

References

  1. https://young-cow.tistory.com/79
Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Aug 2, 2025 docker-compose PostgreSQL DB 백업 및 복원 gabriel yang
Aug 1, 2025 GCP VM 인스턴스에 도메인 연결하기 gabriel yang
Jul 26, 2025 GCP VM 인스턴스에서 DB 및 서비스 이전 가이드 gabriel yang
Jul 19, 2025 윈도우에 ngrok 설치하고 사용하기 gabriel yang
Jun 5, 2025 FastAPI에서 문서 접속을 환경설정으로 제한하는 방법 gabriel yang
May 5, 2025 포트를 점유하고 있는 서비스 제거하기 gabriel yang
Mar 20, 2025 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 gabriel yang
Feb 4, 2025 Windows 11에서 WSL 설치 및 Docker 연결하기 gabriel yang
Oct 7, 2024 Docker Compose로 Jenkins 설치 및 사용하기 gabriel yang
Aug 23, 2024 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 gabriel yang
Jul 24, 2024 GitHub Actions 시작하기 gabriel yang
Dec 31, 2023 우분투와 윈도우 파일 공유하기 (samba) gabriel yang
Dec 5, 2023 crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 gabriel yang
Nov 27, 2023 우분투 docker, docker-compse 설치 gabriel yang
Nov 26, 2023 AWS 호스팅 EC2 와 Lightsail의 차이 gabriel yang
Nov 20, 2023 wsl 이미지 저장 위치 변경 및 백업 gabriel yang
Nov 20, 2023 airflow postgresoperator 사용하기 gabriel yang
Nov 18, 2023 docker-compose로 airflow 설치하기 gabriel yang
Nov 15, 2023 wsl2에 docker 설치하기 gabriel yang
Oct 9, 2023 Github Pull Request 템플릿 적용하기 gabriel yang
No matching items