본문으로 건너뛰기

macOS 메뉴바 앱v0.1.1

Portress

메뉴바에서 열린 포트를 보고, 확인 뒤 바로 닫습니다.

Portress는 현재 사용자의 TCP 수신 포트(listening port)를 프로세스와 컨테이너 단위로 macOS 메뉴바 패널에 보여 줍니다.

포트에서 수신 대기 중인 프로세스는 종료하고 컨테이너는 정지할 수 있으며, 두 동작 모두 확인 창을 거칩니다. 패널을 닫아 두어도 5초마다 스캔하므로 패널을 열면 마지막 결과가 바로 나옵니다.

  • Apple silicon
  • macOS 26 이상
  • 출시
새 서버(8765)가 다음 스캔에서 목록에 나타나고, 확인 창을 거쳐 종료하자 목록에서 사라지는 장면입니다. 데모 서버와 데모 컨테이너만 보이도록 나머지 포트는 무시 목록에 넣고 찍었습니다.

로컬 서버나 Apple container를 자주 띄우면서, 어떤 프로세스가 포트를 잡고 있는지 메뉴바에서 바로 확인하려는 개발자에게 맞습니다.

주요 기능

포트, 프로세스, PID를 한 행에

각 행에 포트, 프로세스나 컨테이너 이름, PID, 바인딩 주소를 보여 주고, 오른쪽에 복사, 무시, 종료나 정지 버튼을 둡니다. 목록은 열린 포트와 컨테이너 두 구역으로 나뉘고, 메뉴바 아이콘 옆 숫자로 패널을 열지 않아도 개수를 알 수 있습니다.

열린 포트 3개(node 두 개와 Python)와 컨테이너 2개(demo-web, demo-mongo)가 보이는 Portress 패널

확인 창을 거치는 프로세스 종료

종료 버튼을 누르면 확인 창이 프로세스 이름, PID, 닫히는 포트를 보여 주고, 확인해야 SIGTERM을 보냅니다. 신호 직전에 PID와 프로세스 시작 시각을 다시 읽어 일치할 때만 보내며, 다른 사용자의 프로세스와 PID 1은 거부합니다.

Python(PID 66132)에 SIGTERM을 보낸다는 안내와 취소, 프로세스 종료 버튼이 있는 확인 창

그 밖의 기능

  • 5초 뒤 강제 종료 제안SIGTERM 뒤 5초가 지나도 프로세스가 포트에서 계속 수신 대기 중이면 강제 종료 버튼이 나오고, 한 번 더 확인해야 SIGKILL을 보냅니다.
  • 컨테이너 이름으로 보고 정지런타임이 대신 수신 대기하는 포트를 컨테이너 이름으로 보여 주고, 확인 뒤 그 컨테이너에 stop만 실행합니다.
  • 검색프로세스 이름, PID, 포트, 주소, 컨테이너 이름으로 목록을 좁힙니다.
  • 포트 무시포트 번호 기준으로 숨기면 목록과 메뉴바 숫자에서 빠지고, 앱을 다시 실행해도 유지됩니다.
  • 한 줄 복사포트, 프로세스 이름, PID, 컨테이너 이름, 주소를 한 줄로 클립보드에 넣습니다.
  • IPv4와 IPv6 합치기한 프로세스가 같은 포트를 IPv4와 IPv6로 열면 한 행으로 합치고, 0.0.0.0과 ::는 주소 * 하나로 표시합니다.
  • 컨테이너 런타임 없이도 사용컨테이너 CLI가 없어도 포트 목록과 프로세스 종료는 그대로 쓸 수 있고, 앱이 데몬을 시작하지는 않습니다.
  • 영어와 한국어 화면화면 문구는 시스템 언어를 따라 영어나 한국어로 나옵니다.

내려받기와 설치

Homebrew로 설치

brew install --cask ClaudeSeo/tap/portress

직접 설치

  1. .dmg 파일을 내려받아 엽니다.
  2. Portress.app을 응용 프로그램 폴더로 끌어 놓습니다.
  3. 앱을 실행하고 메뉴바의 네트워크 아이콘과 숫자를 눌러 패널을 엽니다. Dock 아이콘은 생기지 않습니다.

앱 안에 자동 업데이트 기능은 없습니다. brew upgrade --cask portress를 실행하거나 새 .dmg로 바꿔 설치합니다.

다른 앱