回答:
ポートを使用している実行中のプロセスを見つける方法はいくつかあります。
フューザーを使用すると、リスニングポートに関連付けられた複数のインスタンスの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
実行するコマンドを示すワンライナーは次のとおりです。
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
プロセスが実際に強制終了echoされるようsudoに置き換えます。
echoのためにsudo
80です。
開いているポートを一覧表示するための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に開いている接続をスキップすること-lでnetstat、またはを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興味深い別のスクリプトがあります。
あなたはすでにどのプロセスを殺すべきかを見つけました:それはプロセス番号で20570あり、そのバイナリはhttpdの出力の行の終わりに書かれた名前を持っていますnetstat。あなたはそれを番号kill 20570または名前で殺すことができますがkillall httpd、私はそのようにすることはお勧めしません。
1024未満のポートは標準化された使用法(通常)であり、それらを使用して他の多くのポートを検索できますless /etc/services。ポート80のエントリもコメント化されています。
http 80/tcp www # WorldWideWeb HTTP
だからそれはおそらくウェブサーバーです。あなたが持っている名前があるhttpdとman httpd、あなたにそれが収まるApacheのバイナリであることに大きなヒントを与える必要があります。Apacheは大きなプレーヤーの1つであり、快適な管理プログラムがいくつか利用できますが、単なる起動/停止アクションには必要ありません。
あなたはミントを持っていますか?通常のデスクトップでは?次に、Control Center下Systemを見てをクリックしますServices。そこで何かをするには、管理者である必要があります。「webserver」というラベルの付いたものが見つかるまでスクロールします(私はApacheの代わりにlighttpdを使用しており、Apacheエントリがどのように表示されるのか正確にはわかりません)。
一時的に停止したいだけの場合は、コンソールで
sudo service stop httpd
から始めsudo service start httpdます。認識して処理できるservice --status-allすべてのサービスのリストを返しますservice。サービスの再起動のショートカット(ある:停止し、そのためには、それを起動する)があるservice --full-restart SERVICEとSERVICE、例えばサービスの名前であること:httpdアパッチの場合。
あなたが見つけたプログラムのほとんどはそのnetstatように扱うことができます。manページがないものもあれば、ないものもありますが、まれです。
これを行う簡単な方法があります。まず、netstatでポート80を使用しているプロセスを確認します。
netstat -ntl | grep 80
ここで、プロセス名を取得し、killallコマンドでプロセスを強制終了します。
killall -9 process name
killall説明や警告がない場合は-1 。
-k一致するすべてのプロセス-iを強制終了し、インタラクティブに強制終了する(スイッチごとにプロンプトを表示する)スイッチもあることを指摘しておきます。