[오류 노트] kill 명령어로 프로세스 종료
오류 발생
REST API 실습을 위해 json-server를 실행했다.
➜ TodoApp + REST API (with JSON Server) json-server database/db.json --watch
\{^_^}/ hi!
Loading database/db.json
Done
Resources
http://localhost:3000/todos
http://localhost:3000/ediya-menu
Home
http://localhost:3000
Type s + enter at any time to create a snapshot of the database
Watching...
하지만 오류가 발생한다!!
address already in use 127.0.0.1:3000
→ 이미 3000 포트를 사용하고 있다는 것이다.
Some error occurred Error: listen EADDRINUSE: address already in use 127.0.0.1:3000
at Server.setupListenHandle [as _listen2] (net.js:1318:16)
at listenInCluster (net.js:1366:12)
at GetAddrInfoReqWrap.doListen [as callback] (net.js:1503:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:69:8) {
code: 'EADDRINUSE',
errno: -48,
syscall: 'listen',
address: '127.0.0.1',
port: 3000
}
이럴 경우 구동하는 포트 번호를 3001와 같은 식으로 바꾸거나 이미 사용 되고 있는 3000의 서버를 강제 종료하면 된다.
해결 방법
kill 명령어로 프로세스 종료
서버를 구동시킨 상태에서 losf 명령어를 사용 입력한다. -i 옵션 뒤에 프로토콜과 포트를 명시해주면 TCP 3000번 포트를 사용하는 프로세스 정보가 출력된다.
lsof -i TCP:3000

위 사진과 같이 정보가 출력된다. 여기서 확인 할 것은 실행된 node의 PID(process ID)이다. 58841번을 기억하고 이제 해당 프로세스를 중지해보자
kill 명령어

kill -9 명령어를 사용하면 해당 프로세스가 중지 된다.
kill -9 (PID) 또는 kill -KILL (PID)

kill -9
명령어는 해당 프로세스를 즉시 종료하기 때문에 데이터 유실되거나 리소스가 제대로 안닫히는 문제가 발생할 수 있다.
권장하는 방법은 kill -TERM PID
나 kill -INT PID
같이 종료를 의미하는 signal 을 여러 번 전송해서 종료시킨다. 제대로 된 프로그램은 보통 cleanup 코드를 수행하고 종료하게 됩니다.
참고
Last updated
Was this helpful?