【터미널】터미널 강제 종료 후, rails s하면 A server is already running이 되었을 때의 대처법 【Rails】

「controll+z」로 서버를 끊으면, rails s가 효과가 없게 되었다. 어떻게 하자.

【버전】

Rails 5.2.4.3
Ruby 2.5.1
macOS Catalina 10.15.4

【경위】

로컬에서 작업하는 동안 rails s에서 시작한 localhost : 3000을 "controll 키 + c"로 서버를 끄고 다시 "rails s"로 시작하려고하면 괜찮습니다 ... 다른 방법 없는지 조사한 결과 「controll 키 + z」로 강제 종료할 수 있는 것이 판명.

그러나 'controll 키 + z'로 강제 종료 후,
다시 rails s에서 시작한 결과 localhost : 3000이 일어나지 않고 다음 오류가 발생했습니다.

터미널
A server is already running. Check /Users/名前/XXX/XXXXXX/tmp/pids/server.pid.


"서버가 이미 시작되었습니다."라고 말했습니다.

【해결 방법】

그러므로

터미널
% lsof -i:3000

로 어떤 프로세스가 움직이고 있는지를 확인해 본다.

lsof 명령
… 「LiSt Open Files」(열려 있는 파일군을 열거한다)라는 말에서 유래하는 것 같습니다. 그 이름대로, 「프로세스가 열려 있는 파일」을 표시하는 커멘드인 것 같습니다.


터미널
COMMAND  PID            USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby    6792 satokokinoshita   11u  IPv4 0x95b341c28591923f      0t0  TCP localhost:hbci (LISTEN)
ruby    6792 satokokinoshita   22u  IPv6 0x95b341c27813ce6f      0t0  TCP localhost:hbci (LISTEN)


실제 화면은 이런 느낌이었다


여기서 COMMAND가 ruby가 되어 있는 PID의 번호(여기라면 6792, 아래의 화면이면 3405)를 ○에 넣는다.

터미널
% kill -9 〇〇〇〇

이제 rails s로 다시 시작할 수 있습니다.

※덧붙여서 kill 커맨드에 대해서는 kill -9(강제 종료) 이외는 시험하고 있지 않습니다.

localhost:3000의 서버를 끊었을 때에 사라져야 할 프로세스가, 강제 종료한 것으로 일부 남아 버렸다고 생각합니다.
「PID(프로세스 아이디어)」는, 프로세스를 식별하기 위한 일의의 숫자가 됩니다만,
PID를 지정하고 kill 명령으로 끊으면 서버를 끊은 상태로 돌아갔다고 생각했습니다.

【참고로 한 사이트】

이 포트에서 실행중인 프로세스는 무엇입니까? lsof 명령 사용법

프로세스를 멈추는 최종 수단 kill 명령의 종류 · 신호 사용법

【해당 에러에 직면했을 때의 감상적인】
Rails의 화면에 표시되는 에러는 익숙했지만, 터미널의 에러는 별로 없기 때문에 이상한 땀이 나왔습니다😅
터미널 명령은 점점 익숙해지고 싶습니다.

좋은 웹페이지 즐겨찾기