# Port Processes

> 로컬 TCP 리스닝 포트의 bind 주소, 소유 프로세스, 실행 파일, 작업 디렉터리와 정리 판단을 보여주고, 사용자가 명시적으로 요청한 뒤 해당 사용자 소유 서버 프로세스만 안전하게 종료한다. 로컬 서버·포트 확인, 특정 포트의 PID 확인, 개발 서버 정리 요청에 사용한다.

- Skill: `aqwsde321/port-processes` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add aqwsde321/port-processes`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aqwsde321/port-processes/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aqwsde321 (https://skillmd.com/u/aqwsde321)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/aqwsde321/port-processes

---


# Port Processes

로컬 개발 서버의 포트, bind 주소, PID, 사용자, 프로세스명, 실행 파일, 작업 디렉터리와 정리 판단을 조회한다. 기본 동작은 읽기 전용 조회다.

## 조회

사용자의 포트·서버 확인 요청에는 번들 스크립트를 `inspect` 모드로 실행한다.

```bash
bash <skill-directory>/scripts/port-processes.sh inspect
```

기본 출력은 포트·bind·PID·프로세스·경로(CWD)·판단이 있는 compact 요약 표와 복수 PID 경고다. 이 표를 그대로 보여주고 그 뒤에만 해석을 추가한다. `상세`라는 요청이 있을 때만 다음 명령으로 프로세스 상세를 펼친다.

```bash
bash <skill-directory>/scripts/port-processes.sh inspect --details
```

`상세`가 없으면 `--details`와 `ps` 조회를 실행하지 않는다. `판단(추정)` 열의 휴리스틱을 사실처럼 확정하지 않는다. `모든 인터페이스 가능`은 인터넷 공개를 뜻하지 않고 외부 바인드 가능성만 뜻한다. 이 스크립트는 로컬 TCP `LISTEN` 소켓만 보여준다.

`판단`은 프로세스명, 실행 파일, 작업 디렉터리, 현재 작업공간, bind 주소를 조합한 후보 분류다.

- `개발 서버 후보`: Node·Python 등은 CWD와 포트 인자를 확인하고 프로젝트 서버인지 설명한다.
- `시스템·앱 경로`: Docker·GitHub Desktop 같은 헬퍼는 일반적으로 유지 대상으로 분류한다. 사용자가 정확한 종료 대상을 명시하면 별도 확인한다.
- `터널 후보`: ngrok은 연결 목적을 확인한 뒤에만 정리 대상으로 제시한다.
- `정체 확인 필요`: 근거 없이 프로세스 종류나 소유 프로젝트를 단정하지 않는다.

`상세` 요청이 있으면 개발 서버 후보마다 표의 PID로 별도 `ps -p <PID> -o command=` 조회를 시도한다. 명령 인자에 포함될 수 있는 token·password·secret·key·authorization 값은 출력하지 말고 `[REDACTED]`로 가린다. 조회가 막히면 추측하지 말고 `실행 인자 확인 불가`로 보고한다.

같은 포트에 PID가 여러 개면 포트만으로 종료하지 않는다. 각 PID의 bind 주소와 실행 인자를 확인한 뒤 사용자가 종료 대상을 특정해야 한다.

일반 응답은 다음 순서를 따른다.

1. `요약 표`: 스크립트 출력 그대로. 경로(CWD)를 포함한다.
2. `유지`: 시스템·앱 프로세스와 유지 근거.
3. `추가 확인`: bind 범위, 다른 작업공간, 복수 PID 같은 확인 사항.
4. `정리 후보`: 사용자가 종료를 요청하지 않았으면 `없음`으로 표시한다.

`상세` 요청이 있으면 `요약 표` 뒤에 `프로세스 상세`와 `실행 인자`를 추가한다. 긴 실행 파일과 CWD는 축약하지 않고, 비밀값은 `[REDACTED]`로 가린다. `--show-sensitive-values` 같은 위험 신호는 사실로 표시한다.

프로세스를 확인했다는 이유만으로 종료 후보를 실행하지 않는다.

## 종료

다음 요청에서 사용자가 포트나 서버 종료를 명시했을 때만 실행한다.

1. stale PID와 PID 재사용을 피하려고 `inspect`를 다시 실행한다.
2. 요청한 포트·서버가 정확히 하나의 PID로 식별되는지 확인한다. 여러 개거나 시스템·다른 사용자 프로세스면 중단하고 확인을 요청한다.
3. 확인된 PID만 종료한다.

```bash
bash <skill-directory>/scripts/port-processes.sh stop <PID>
```

스크립트는 현재 TCP listener인지, 실행 사용자가 현재 사용자와 같은지, PID가 1보다 큰지 확인한 뒤 `SIGTERM`만 보낸다. 종료 후 `inspect`를 다시 실행해 사라졌는지 확인한다. 목록을 출력했다는 이유만으로 종료하지 않는다.

## 완료 기준

- 조회: 기본 요청에는 경로(CWD)가 포함된 compact 요약 표를 보여주고, `상세` 요청에만 PID별 상세 블록과 실행 인자를 추가하며 복수 PID 포트를 별도로 알린다.
- 종료: 대상 식별, `SIGTERM` 전송, 종료 확인 결과를 보고한다.
- UDP 포트나 강제 종료가 필요하면 현재 범위를 벗어난 것으로 명시한다.

