web-dev-qa-db-ja.com

ポートでのリスニングを停止するSolarisコマンド

リッスンしているポートを適切に閉じずにクラッシュすることがあるレガシーアプリケーション(私は制御していません)があります。ボックスを再起動する以外に、特定のポートでのリッスンを停止するSolarisコマンドはありますか?

2
parcel

上手。まだ開いているポートを見つけるには、ゾンビになったプロセス、または使用できなくなったプロセスを見つける必要があります。プロセス名またはPIDがわかっている場合は、pfilespreappkillなどのコマンドで使用すると非常に便利です。

PIDまたはプロセス名で開いているポートを検索できるスクリプトがあります。

#!/usr/bin/ksh -p

process=$1

# if $1 is all numbers, then assume it's a PID, and get the parent process.
if [[ $process = +([0-9]) ]]; then
        for pid in $( ptree $process | grep '^[0-9]' | awk '{print $1}' ); do
                pfiles $pid | egrep "^$pid:|sockname"
        done
else
# if $1 is/has letters, then assume it's a process name, and grep accordingly.
        for pid in $( ptree | grep $process | grep '^[0-9]' | awk '{print $1}' ); do
                pfiles $pid | egrep "^$pid:|sockname"
        done
fi

これにより、PID、プロセス名、および$ 1に一致するプロセスに対して開いているソケットが出力されます。

どのPIDがそのソケットを開いたままにしていて使用できないかが正確にわかったら、pkillまたはpreapコマンドのいずれかを使用して、そのPIDとそれが開いているファイル記述子を強制的に閉じることができます。

3
Tim Kennedy

ポートがまだリスニング状態にある場合、アプリケーションはまだ何らかの形で実行されています。コマンドlsof -iを使用して、まだリッスンしているプロセスを確認し、それを強制終了します。

lsofツールがインストールされていない場合は、ps -efでアプリケーションの実行中のプロセスを検索する必要があります。

1
ktf