私が殺したいプロセスは次のとおりです。
sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6 0 0 :::80 :::* LISTEN 20570/httpd
答え1
実行中のプロセスがポートを使用しているかどうかを見つける方法はいくつかあります。
fusionr を使用すると、受信ポートに関連付けられた複数のインスタンスの 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
答え2
以下は、実行するコマンドを示す1行の内容です。
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
終了する実際のプロセスecho
に置き換えます。sudo
答え3
開いているポートを一覧表示する3つのオプションがあります。ジェッシュ~の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
ローカル側のポートのみを一致させ、リモートポート80への接続を開くことをスキップします。 (代替案は-l
withnetstat
またはwithをlsof
使用する-sTCP:LISTEN
ことですが、上記のgrepもキャッチすることを好みます。出るつながる~から特定のポートが時々注意を引くことがあります。 )
代わりにディスプレイをlsof
使用するとgrepが可能になります。このオプションはタイムリーに完了するよう強制します。-P
:80
:http
-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
これは面白いでしょう。