##はじめに
Railsをローカル環境内で実行する時に起動にエラーが発生する場合があります。
この場合は、プロセス番号でrailsを停止する事が可能です。
コマンドを二回うつだけでrailsの起動に関する問題を解決できます。
【 control + C 】でrailsを停止しようとしても反応がしない。
ターミナル再起動したけど 【A server is already running.】により起動することができない。
そんな時に新規ターミナルで強制終了することができます。
環境やバージョンにより実行が異なる場合があります。
####実行環境
pc: macOS Catalina
shell: zsh
rails: 6.0.0
ruby: 2.7.2
railsを起動や再起動しようとし、以下のコマンドを実行しエラーになった。
% rails s
=> Booting Puma
=> Rails 6.0.3.4 application starting in development
=> Run `rails server --help` for more startup options
A server is already running. (省略)
こちらはrailsのサーバーを起動した状態で、
「ターミナルを終了してしまった。」や「control + Cで終了し再起動した。けど...ダメだ。」
この様なエラーは様々です。
早速コマンドを実行して起動を終了します。
まず以下のコマンドを実行しプロセス番号を取得します。
% lsof -i tcp:3000 もしくは lsof -wni tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 7361 UserName 12u IPv6 0x310cb952b8b0dc9d 0t0 TCP localhost:hbci (LISTEN)
ruby 7361 UserName 13u IPv4 0x310cb952bbe4ce0d 0t0 TCP localhost:hbci (LISTEN)
次にプロセス番号(PID)を取得できたら以下のコマンドでrailsの停止をする事ができます。
この場合であれば,7361がプロセス番号です。
% kill PID もしくは kill -9 PID
以上でrails sで起動してくれるのではないでしょうか。
###解説
lsof -i
lsofは開いているファイルなどを取得するコマンド
-iはやプロセス番号やポート番号を検索し取得するlsofのオプション
-wniは-iと役目は変わりません。
lsof -i tcp:3000
上記のコマンドでもプロセス番号を取得することは可能なのですが、多くの情報を取得してしまいます。
そうなると探し出すのが大変になるので、local で以下の様にすることで情報を限定するとピンポイントで取得する事ができます。
「ローカル3000で起動しているプロセス番号と使用ファイルの情報を取得」となります。
killコマンドはプロセスにシグナルを送るコマンド
kill -9 プロセス番号
もしくは
kill -i プロセス番号
−9はオプション・シグナルと呼ばれるます。
以下のコマンドは「起動中のプロセス番号に停止する」となります。
###一言
僕も知識はまだまだです。
何か誤りがあれば訂正いたしますので、
新しい情報もあれば宜しくお願いいたします。