ポート80で実行されているプロセスを強制終了


14

これは私が殺したいプロセスです:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

回答:


31

ポートを使用している実行中のプロセスを見つける方法はいくつかあります。

フューザーを使用すると、リスニングポートに関連付けられた複数のインスタンスのPIDが提供されます。

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

見つけたら、プロセスを停止または強制終了できます。

lsofを使用してPIDと詳細を見つけることもできます

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

(ポート80に接続するクライアントではなく)ポート80 をリッスンするソケットに制限するには:

sudo lsof -i tcp:80 -s tcp:listen

それらを自動的に殺すには:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

1
フューザーには、-k一致するすべてのプロセス-iを強制終了し、インタラクティブに強制終了する(スイッチごとにプロンプ​​トを表示する)スイッチもあることを指摘しておきます。
A. Wilcox

7

実行するコマンドを示すワンライナーは次のとおりです。

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

プロセスが実際に強制終了echoされるようsudoに置き換えます。


置き換えechoのためにsudo
EliuX

これは、ポート番号をに置き換えるだけでよい完璧な答え80です。
Youssof H.

4

開いているポートを一覧表示するための3つのオプションはで提供されていJSHさんwhatisonport

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

netstat高速で簡潔で、他のユーザーが開いているポートを一覧表示できるので、私は好みです。(ただし、そのようなプロセスの名前とPIDをリストするには、スーパーユーザー/ユーザー特権が必要です。)

アウトプット

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

使用grepの2つの場合には(代替使用することですローカル側にのみポートと一致し、リモートポート80に開いている接続をスキップすること-lnetstat、またはをlsof使用することに-sTCP:LISTEN、彼らがするので、上記のようにgrepするが、私また、特定のポートから発信接続キャッチします。これは、場合によっては興味深いことがあります。)

ではlsof、私たちは使用-P表示する:80代わりに:httpgrepを可能にします。-S 2オプションの力がlsofタイムリーに完了します。

プロセスを強制終了する

を使用する場合netstat、次のようにPIDを取得できます。

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

そして、これらのPIDを渡すこともできkillます。

... | xargs -d '\n' kill -KILL

ただし、正規表現を使用すると誤検知が発生する可能性があるため、の初期出力netstatを確認し、実行するかどうかを手動で決定することをお勧めします。

$ kill -KILL 1914

こちらもご覧ください

listopenports興味深い別のスクリプトがあります。


3

あなたはすでにどのプロセスを殺すべきかを見つけました:それはプロセス番号で20570あり、そのバイナリはhttpdの出力の行の終わりに書かれた名前を持っていますnetstat。あなたはそれを番号kill 20570または名前で殺すことができますがkillall httpd、私はそのようにすることはお勧めしません。

1024未満のポートは標準化された使用法(通常)であり、それらを使用して他の多くのポートを検索できますless /etc/services。ポート80のエントリもコメント化されています。

http            80/tcp          www             # WorldWideWeb HTTP

だからそれはおそらくウェブサーバーです。あなたが持っている名前があるhttpdman httpd、あなたにそれが収まるApacheのバイナリであることに大きなヒントを与える必要があります。Apacheは大きなプレーヤーの1つであり、快適な管理プログラムがいくつか利用できますが、単なる起動/停止アクションには必要ありません。

あなたはミントを持っていますか?通常のデスクトップでは?次に、Control CenterSystemを見てをクリックしますServices。そこで何かをするには、管理者である必要があります。「webserver」というラベルの付いたものが見つかるまでスクロールします(私はApacheの代わりにlighttpdを使用しており、Apacheエントリがどのように表示されるのか正確にはわかりません)。

一時的に停止したいだけの場合は、コンソールで

sudo service stop httpd

から始めsudo service start httpdます。認識して処理できるservice --status-allすべてのサービスのリストを返しますservice。サービスの再起動のショートカット(ある:停止し、そのためには、それを起動する)があるservice --full-restart SERVICESERVICE、例えばサービスの名前であること:httpdアパッチの場合。

あなたが見つけたプログラムのほとんどはそのnetstatように扱うことができます。manページがないものもあれば、ないものもありますが、まれです。


0

これを行う簡単な方法があります。まず、netstatでポート80を使用しているプロセスを確認します。

netstat -ntl | grep 80

ここで、プロセス名を取得し、killallコマンドでプロセスを強制終了します。

killall -9 process name

「killall」コマンドを使用することの危険は何ですか?
Peter Mortensen

2
killall説明や警告がない場合は-1 。
guntbert、2015年

1
killallにはいくつかの問題があります。問題が発生した場合にシステムをひっくり返すだけでなく、ポートに関連付けられていないプロセスの複数のインスタンスを強制終了することもできます。何よりも、killallの最大の問題は、Solarisボックスの誰かがそれを使用しようとすると、実行中のすべてのプロセスが強制終了されることです。
Rui F Ribeiro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.