web-dev-qa-db-ja.com

Mac上でポート3000をロックしているプロセスを見つけて(そして殺して)ください

自分のTCPポートをリッスン/使用しているプロセスをどのように見つけますか?私はMac OS Xを使っています。 

クラッシュやバグの後で、私のRailsアプリケーションがポート3000をロックしてしまうことがあります。ps -efを使用しても見つけられません。 

するとき

Rails server

私は

アドレスはすでに使用されています - bind(2)(Errno :: EADDRINUSE)

2014年の更新:

以下のいくつかの答えを完成させるには:killコマンドを実行した後、pidファイルを削除する必要があるかもしれませんrm ~/mypath/myrailsapp/tmp/pids/server.pid

1286
oma
  1. netstatを試すことができます

    netstat -vanp tcp | grep 3000
    
  2. macOS El Capitan 以降(またはあなたのnetstatが-pをサポートしていない場合)にはlsofを使用してください。

    Sudo lsof -i tcp:3000 
    
  3. Centos 7 useの場合

    netstat -vanp --tcp | grep 3000
    
2147
ghostdog74

見つける:

[Sudo] lsof -i :3000

殺します:

kill -9 <PID>
1399

上記の何も私のために働いた。私の経験を持つ人なら誰でも次のことを試すことができます(私のために働いた)。

実行します。

lsof -i :3000 (where 3000 is your current port in use)

次に、報告されたPIDのステータスを確認します。

ps ax | grep <PID>

最後に、「それを始めて」:

kill -QUIT <PID>
129
Austin

ポート3000を使用してプロセスのPIDを抽出して強制終了するためのワンライナー。

lsof -ti:3000 | xargs kill

-tフラグを指定すると、lsofの出力からPID以外のすべてのものが削除され、簡単に削除できます。

109
Zlemini

lsof -i:3000を使うことができます。

それが "オープンファイルのリスト"です。これはあなたにプロセスとそれらが使用するファイルとポートのリストを与えます。

89
DerMike

.bash_profileで、3000プロセスのterminateへのショートカットを作成します。

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

その後、ブロックされている場合は$terminateを呼び出します。

53
alexzg

そのようなプロセスを強制的に強制終了するには、次のコマンドを使います。 

lsof -n -i4TCP:3000 

3000は、プロセスが実行されているポート番号です。

これはプロセスID(PID)を返して実行します 

kill -9 "PID"

最初のコマンドを実行した後に取得した番号でPIDを置き換えます 

For Instance, if I want kill the process running on port 8080

52
tadtab
lsof -P | grep ':3000' | awk '{print $2}'

これはあなたにMacOSでテストされたpidだけを与えます。

34
Kris

この単一のコマンドラインは覚えやすいです: 

npx kill-port 3000

より強力な検索ツール

npx fkill-cli 


PS:彼らはサードパーティのjavascriptパッケージを使っている

出典: Tweet | github

32
Bruno Lemos

ポート上のプロセスを強制終了する方法の1つは、pythonライブラリを使用することです:freeport( https://pypi.python.org/pypi/freeport/0.1.9 )。インストールしたら、次のようにします。

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
27
YBathia

OS-X El Capitanのコマンドラインで実行します。

kill -kill `lsof -t -i tcp:3000`

Lsofの簡潔なオプションは、PIDのみを返します。

27
JE42

ポートをブロックしているプロセスを表示するには

netstat -vanp tcp | grep 3000

ポートをブロックしているプロセスを強制終了するには:

kill $(lsof -t -i :3000)

22
Henry

開いている接続を見つけます  

lsof -i -P | grep -i "聞く"

プロセスIDで強制終了

kill -9 'PID'

22
Sourabh Bhagat

PIDを見つけてプロセスを終了します。

lsof -ti:3000 | xargs kill
17
Rahul Garg

これを達成するための可能な方法: 

Topコマンドは、システムのリソース使用状況を表示し、最もシステムリソースを消費しているプロセスを確認するための従来の方法です。上部にプロセスのリストが表示され、一番上のCPUを使用しているものが上部に表示されます。

ps

Psコマンドは、実行中のプロセスを一覧表示します。次のコマンドは、システムで実行されているすべてのプロセスを一覧表示します。

ps -A

他のコマンドを使用せずに、出力をgrepにパイプ処理して特定のプロセスを検索することもできます。次のコマンドはFirefoxプロセスを検索します。

ps -A | grep firefox

プログラムにシグナルを渡す最も一般的な方法は、killコマンドを使用することです。

kill PID_of_target_process

lsof

開いているすべてのファイルとそれらを開いたプロセスのリスト。

lsof -i -P | grep -i "listen"
kill -9 PID

または

 lsof -i tcp:3000 
13
smooth

見つけて殺す:

この単一のコマンドラインは簡単で、正しく機能します。 

kill -9 $(lsof -ti tcp:3000)
13
Dylan Breugne

最も簡単な解決策 :1行のコマンドで複数のポートを終了.

kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed

lsof -t -i:3000

82500

lsof -t -i:3001

82499

lsof -t -i:3001,3000

82499 82500

$を殺す(lsof -t -i:3001,3000)

1つのコマンドでプロセス82499と82500を終了します。

lsof -t -i:3000

lsof -t -i:3001

package.jsonスクリプトでこれを使うことができます

"scripts": { "start": "kill $(lsof -t -i:3000,3001) && npm start" }

11
Abhijith

sindresorhusfkill toolを使うと、これができます。

$ fkill :3000
5
Kodie Grantham

~/.bash_profileに追加してください:

function killTcpListen () {
  kill -QUIT $(Sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

それからsource ~/.bash_profileそして実行

killTcpListen 8080

5
rofrol

私はこれのために少し関数を作りました、それをあなたのrcファイルに追加してください(.bashrc.zshrcまたは何でも)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

それであなたはあなたのRailsサーバーを殺すためにkill-by-port 3000をタイプすることができます(それが走っているどんなポートでも3000を代用します)

それに失敗しても、Railsのルートディレクトリからkill -9 $(cat tmp/pids/server.pid)とタイプすればいいのです。

3
Caleb Keene

これら2つのコマンドは、サーバープロセスを見つけて強制終了するのに役立ちます。

  1. lsof -wni tcp:3000
  2. -9 pidを殺す
3
Saif chaudhry

TL; DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

ポートを使用しているクライアントとサーバーの両方が存在する状況にある場合は、以下のようになります。

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

それならあなたはおそらく両方を殺したくないでしょう。

この状況では、リスニングしているプロセスのpidのみを表示するために-sTCP:LISTENを使用できます。これを-tの簡潔な形式と組み合わせると、自動的にプロセスを強制終了できます。

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
3
Benjie

lsof -i tcp:port_number - そのポートで走っているプロセスをリストします

kill -9 PID - プロセスを強制終了します

あなたの場合は、

あなたの端末からのlsof -i tcp:3000はプロセスのPIDを見つけます

kill -9 PID

1
Shan

これは名前やポートで複数のプロセスをkillするためのヘルパーbash関数です。

fkill() {
  for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

使用法:

$ fkill [process name] [process port]

例:

$ fkill someapp :8080 node :3333 :9000
1
Miguel Mota

あなたはこれを試すべきです、このテクニックはOSに依存しません。

アプリケーションの横にはtmpという名前のフォルダがあり、その中にはpidsという名前の別のフォルダがあります。 そのファイルにはサーバーのpidファイルが含まれています。単にそのファイルを削除してください。 portは自動的に自分自身を殺します。

これは簡単な方法だと思います。 

1
Arun P

あなたはこれを試すことができます

netstat -vanp tcp | grep 3000
0
Foram Thakral

あなたがコードフリーな方法が欲しいなら - 活動マネージャを開いて、強制的にノードを殺してください:)

次のコマンドを使用して、ポート3000のプロセスを強制終了します。kill $(lsof -t -i:3000)

0
vinayb21