# 3000番のポートを占有しているプロセスを見つけてkillしたい(Mac)

原文: Find (and kill) process locking port 3000 on Mac (opens new window) 翻訳: 2021年05月05日

# Question


TCPポートを占有しているプロセスを見つけてkillしたいです。
使用しているPCはMacです。

クラッシュやバグが発生した後、railsが3000番のポートを占有し続けていることがあります。しかしps -efを叩いても見つけられません。

rails server

のコマンドを打つと、以下のエラーになります。

Address already in use - bind(2) (Errno::EADDRINUSE)

追記(2014年):
以下を行うための前提として、killコマンドを実行した後、必要に応じてpidファイルを削除してください。 rm ~/mypath/myrailsapp/tmp/pids/server.pid

@oma - 2010-10-04 12:19

ユーザが指定した任意のポート上のプロセスをkillするためのスマートな回答は、以下の@Kevin Suttle氏のものだと思う。function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }

@user456584 - 2014-01-17 18:39

# 3 Answers


  1. netstatを使ってみてください。
netstat -vanp tcp | grep 3000
  1. El Capten以降のmacOSの場合、もしくはnetstat -pが使えない場合、lsofを試してみてください。
lsof -i tcp:3000
  1. もしくはCentOS7の場合。
netstat -vanp --tcp | grep 3000
@ghostdog74 - 2010-10-04 12:48

Thank you! あんたの回答を参考にしてポートぶっ殺しスクリプトを作った。 (#!/usr/bin/ruby `lsof -t -i tcp:#{ARGV.first} | xargs kill`)

@Sv1 - 2013-10-02 18:40

lsofに"terse"(省略)フラグをつけると、パイプラインでkillに渡せる形で出力してくれるので便利だな。 lsof -t -i tcp:1234 | xargs kill

@Manav - 2014-01-07 04:58

探す:

sudo lsof -i :3000

killする:

kill -9 <PID>
@Filip Spiridonov - 2013-09-09 20:58

時々lsof -i :portを叩いても何も表示されないことがある。その時はsudo lsof -i :portを使おう。

@kilik52 - 2014-01-30 12:05

安全のことを考えるなら、kill -15 <PID>をkill -9する前に試すべきだろう。

@Jamon Holmgren - 2015-08-16 23:55

@Jamon Holmgren どうして?両方とも何をしているの?それに、どうしてkill <PID>では不十分/危険/不完全なの?

@Michael Trouw - 2015-11-24 12:45

一年ほど経ってしまったけれど答えよう。 unix.stackexchange.com/a/89189 (opens new window) TL;DR kill -15はプロセスに後始末をさせることができるんだ。

@Jamon Holmgren - 2016-10-12 05:57

この回答は-9が何をやっているか説明するべきだったな。

@Joseph Fraley - 2017-01-17 19:13

簡単に済ませるなら:

kill $(lsof -ti:3000,3001)


ポートを指定する場合:

kill $(lsof -ti:3000)

3000のポートが解放される。


複数のポートを指定する場合:

kill $(lsof -ti:3000,3001)

3000と3001のポートが解放される。


lsof -ti:3000
-> 82500 (Process ID)

lsof -ti:3001
-> 82499

lsof -ti:3001,3000
-> 82499 82500

kill $(lsof -ti:3001,3000)
-> 82499と82500を一行でkillできる。

package.jsonの中にこのスクリプトを書くのもありだ。
"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }

@Abhijith Sasikumar - 2019-03-12 07:02

HOMEへ戻る