ローカルで動かしているLaravelで、重い処理行うAPIの実行を止めたい時の忘備録。
サーバー再起動やそれっぽいプロセスをkillしても動き続ける時。
結論
以下のコマンドで停止できる。
$ sudo kill $(sudo lsof -t -i:8000)
コマンド解説
lsofはオープンしているファイルを一覧表示するコマンド。
-iオプションで特定のポートで実行しているプロセスを表示できる。
$ lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Google 91524 xxxxx 35u IPv4 0x6f9544b817401ad3 0t0 TCP localhost:56762->localhost:irdmi (ESTABLISHED)
php 93463 xxxxx 5u IPv4 0x6f9544b82f9287c3 0t0 TCP localhost:irdmi (LISTEN)
php 93463 xxxxx 6u IPv4 0x6f9544b8190aa1eb 0t0 TCP localhost:irdmi->localhost:56762 (ESTABLISHED)
-tオプションでプロセス番号のみ表示し、それを$( )でネストしてkillする。
$ kill $(lsof -t -i:8000)
原因
下二つが該当のプロセスの模様。
artisan servを停止するだけだと上のプロセスのみが停止して、下のプロセスは動き続けていた。
コマンドでkillする場合は、プロセスの親子関係を考慮しないとうまく停止できない場合があるけど
上記のコマンドだと一気にプロセス削除できるので順番を気にしなくて良い。
PID TTY TIME CMD
xxxxx xxxxx 0:00.24 php artisan serv
xxxxx xxxxx 0:00.08 /usr/bin/php -S 127.0.0.1:8000 /path/to/server.php