Bem. Você precisa encontrar o processo que se foi zumbi, ou deixou de ser utilizável, para encontrar a porta que ainda está aberta. Se você souber o nome do processo ou o PID, isso é muito útil para usar com comandos como pfiles
, preap
e pkill
.
Eu tenho um script que pode pesquisar PIDs ou nomes de processos para portas abertas.
#!/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
Isso imprimirá o PID, o processname e todos os sockets abertos para qualquer processo que corresponda a $ 1.
Uma vez que você sabe exatamente qual PID está mantendo aquele socket aberto, e não sendo utilizável, você pode usar um dos comandos pkill
ou preap
para forçosamente fechar aquele PID e os descritores de arquivo que ele abriu.