リッスンしているポートが正しく閉じられない場合は、クラッシュが発生するレガシーアプリケーション(制御不能)があります。システムを再起動せずに特定のポートでリッスンを停止するSolarisコマンドはありますか?
答え1
まあ。まだ開いているポートを見つけるには、ゾンビになったプロセスまたは使用できなくなったプロセスを見つける必要があります。プロセス名やPIDがわかっている場合はpfiles
、preap
などのコマンドを使用してくださいpkill
。
開いているポートを見つけるために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
これにより、$1 に一致するプロセスに対して開かれた PID、プロセス名、ソケットが印刷されます。
ソケットを開いたままにして使用できないままにするPIDが何であるかを正確に知ったら、またはコマンドのいずれかをpkill
使用preap
して、そのPIDと開いているファイル記述子を強制的に閉じることができます。
答え2
ポートがまだリッスンしている場合、アプリケーションは何らかの方法で実行され続けます。コマンドの使用lsof-iどのプロセスがまだリッスンしているかを確認して終了します。
いない場合ラソフツールをインストールしたら、以下を検索する必要があります。ポリスチレン-EFまだ実行中のアプリケーションプロセスの場合。