【ターミナル】ターミナル強制終了後、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の画面に表示されるエラーは慣れたけど、ターミナルのエラーってあまりないので変な汗がでました😅
ターミナルコマンドはどんどん慣れていきたいです。
Author And Source
この問題について(【ターミナル】ターミナル強制終了後、rails sしたらA server is already runningとなった時の対処法【Rails】), 我々は、より多くの情報をここで見つけました https://qiita.com/kinopyyy/items/47f5a204ea9d2367a507著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .