Port Processes
로컬 개발 서버의 포트, bind 주소, PID, 사용자, 프로세스명, 실행 파일, 작업 디렉터리와 정리 판단을 조회한다. 기본 동작은 읽기 전용 조회다.
조회
사용자의 포트·서버 확인 요청에는 번들 스크립트를 inspect 모드로 실행한다.
bash <skill-directory>/scripts/port-processes.sh inspect
기본 출력은 포트·bind·PID·프로세스·경로(CWD)·판단이 있는 compact 요약 표와 복수 PID 경고다. 이 표를 그대로 보여주고 그 뒤에만 해석을 추가한다. 상세라는 요청이 있을 때만 다음 명령으로 프로세스 상세를 펼친다.
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 주소와 실행 인자를 확인한 뒤 사용자가 종료 대상을 특정해야 한다.
일반 응답은 다음 순서를 따른다.
요약 표: 스크립트 출력 그대로. 경로(CWD)를 포함한다.유지: 시스템·앱 프로세스와 유지 근거.추가 확인: bind 범위, 다른 작업공간, 복수 PID 같은 확인 사항.정리 후보: 사용자가 종료를 요청하지 않았으면없음으로 표시한다.
상세 요청이 있으면 요약 표 뒤에 프로세스 상세와 실행 인자를 추가한다. 긴 실행 파일과 CWD는 축약하지 않고, 비밀값은 [REDACTED]로 가린다. --show-sensitive-values 같은 위험 신호는 사실로 표시한다.
프로세스를 확인했다는 이유만으로 종료 후보를 실행하지 않는다.
종료
다음 요청에서 사용자가 포트나 서버 종료를 명시했을 때만 실행한다.
- stale PID와 PID 재사용을 피하려고
inspect를 다시 실행한다. - 요청한 포트·서버가 정확히 하나의 PID로 식별되는지 확인한다. 여러 개거나 시스템·다른 사용자 프로세스면 중단하고 확인을 요청한다.
- 확인된 PID만 종료한다.
bash <skill-directory>/scripts/port-processes.sh stop <PID>
스크립트는 현재 TCP listener인지, 실행 사용자가 현재 사용자와 같은지, PID가 1보다 큰지 확인한 뒤 SIGTERM만 보낸다. 종료 후 inspect를 다시 실행해 사라졌는지 확인한다. 목록을 출력했다는 이유만으로 종료하지 않는다.
완료 기준
- 조회: 기본 요청에는 경로(CWD)가 포함된 compact 요약 표를 보여주고,
상세요청에만 PID별 상세 블록과 실행 인자를 추가하며 복수 PID 포트를 별도로 알린다. - 종료: 대상 식별,
SIGTERM전송, 종료 확인 결과를 보고한다. - UDP 포트나 강제 종료가 필요하면 현재 범위를 벗어난 것으로 명시한다.