私はよくやる.
Sudo netstat -lpn |grep :8088
出力を表示する
tcp6 0 0 :::8088 :::* LISTEN 11189/Java
その後
Sudo kill -kill 11189
TCPポート番号を変数として使用し、必要な処理を行うパイプラインのエイリアスとして作成できるkillatport 8088
のような、より便利なコマンドが欲しいのですが、どうすればPIDを取得できますか出力からそれをkillコマンドにパイプしますか? netstatの出力からPIDを取得するためにawkを使用できるかもしれませんが、入力80が8080と一致しないように、どのように保護し、正確にポートを一致させることができますか?代わりにCプログラムにする必要がありますか?または、このような小さなユーティリティはすでにありますか?
fuser はそれを行うことができます:
Sudo fuser -KILL -k -n tcp 8088
コマンドは次のように定式化できます。
netstat -lpn | grep ":1234\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
説明:
netstat -ltpn
l
)に解決せずに、TCP(t
)上のリッスンポート(p
)とそのプログラム(n
)をリストします。 。grep ":1234\b"
:1234
に続いて境界(\b
)を検索し、Word(またはこの場合は数字)の終わりを示します。これにより、たとえば:12345
をキャッチしないようにします。awk '{sub(/\/.*/, "", $NF); print $NF}'
この
sub(/regex/,"replacewith", #fieldnumber)
を置き換えます\/.*
""
$NF
では、最後のフィールド(つまり、PID/program
を含むフィールド)を意味しますprint $NF
を出力します。正規表現\/.*
はリテラル/
およびその後のすべてと一致します。その後、それを何も置き換えず、本質的に削除するため、そのフィールドにはPID番号のみが残ります。
xargs -i kill -kill {}
xargs -i
は、前のコマンドの出力を別のコマンドへの入力として機能させることができるプログラムです。コマンドはkill -kill {}
です。{}
は、「パイプラインの前のコマンドからの出力」を示します。これはPID番号です。注:このコマンド全体は、危険なものを誤って削除してしまう可能性があるため、少し危険です。それはもう少し消毒で使用できます。使用するときに正しいポート番号を取得するようにしてください。
これを関数にしたい場合、以下を~/.bashrc
に追加できます:
killatport(){
netstat -lpn | grep ":$1\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
}
source ~/.bashrc
を使用して、変更を保存して適用します。これで、次のような関数を使用できます。
killatport 8088