반응형
MAC 특정 포트 프로세스 종료하기
웹 개발하다보면 Web server failed to start. Port 8080 was already in use.
에러를 자주 본다.
특정 포트가 이미 사용 중이므로, 서버를 띄우지 못하는 현상이다.
프로세스 번호 (PID) 찾기
lsof -i :8080
lsof -i :포트
를 해당 포트에 대한 정보를 알 수 있다.lsof
는 list open files의 약자로 시스템에서 열린 파일 목록을 알려주고 프로세스, 디바이스 정보 등의 정보를 출력해준다.
- 현재 8080포트로 실행 중인 프로세스가
10519
임을 확인할 수 있다. - lsof -i 프로토콜:포트번호를 명시할 수도 있는데, 명시한 경우 해당 프로토콜 관련 포트만 표시해준다.
프로세스 종료하기
kill -15 10519
- 해당 명령어를 통해 프로세스를 종료할 수 있다.
-15
는 SIGTERM 시그널(15번 시그널)로 이 시그널을 수신한 프로세스를 종료하는 명령어이다.
시그널 목록
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
kill -9 포트
를 통해 프로세스를 종료하는 경우가 대부분이지만, 추천하지 않는다.- 9는 SIGKILL 옵션으로 강제종료하는 시그널이다. 시그널별로 핸들러를 지정할 수 있는데 SIGKILL(9), SIGSTOP(19)는 핸들러를 등록할 수 없는 시그널이기 때문에, 개발자가 구현한 함수가 호출되지 않고, 프로세스가 즉시 종료되어 데이터 유실이나 리소스 문제를 발생시킬 수 있다.
lsof -i :8080
- 다시 8080포트에 실행 중인 프로세스 정보를 가져오려고하면, 정상 종료되어 출력되는 것이 없는 것을 확인할 수 있다.
REFERENCE
https://www.lesstif.com/asystem-admin/unix-linux-kill-12943674.html
반응형