LoginSignup
19
15

More than 3 years have passed since last update.

【ターミナル】ターミナル強制終了後、rails sしたらA server is already runningとなった時の対処法【Rails】

Posted at

「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)



実際の画面はこんな感じだった
quiita.png

ここで、COMMANDがrubyとなっているPIDの番号 (ここだと6792、下の画面だと3405) を、○に入れる。

ターミナル
% kill -9 〇〇〇〇



これで、rails sで再度起動できるようになりました。

※ちなみにkillコマンドについてはkill -9(強制終了)以外は試しておりません。

localhost:3000のサーバーを切った時に消えるはずのプロセスが、強制終了したことで一部残ってしまっていたのだと思います。

「PID(プロセスアイディー)」は、プロセスを識別するための一意の数字になりますが、
PIDを指定してkillコマンドで切ることで、サーバーを切った状態に戻ったということになったのだと思います。

【参考にさせていただいたサイト】

このポートで実行中のプロセスはどれ? lsofコマンドの使い方

プロセスを止める最終手段killコマンドの種類・シグナルの使い方



【当該エラーに直面した時の感想的な】

Railsの画面に表示されるエラーは慣れたけど、ターミナルのエラーってあまりないので変な汗がでました😅
ターミナルコマンドはどんどん慣れていきたいです。
19
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15