停止侦听端口的 Solaris 命令

停止侦听端口的 Solaris 命令

我有一个遗留应用程序(我无法控制),如果没有正确关闭它正在侦听的端口,它偶尔会崩溃。是否有 Solaris 命令可以停止侦听给定端口,无需重新启动机器?

答案1

嗯。您需要找到变成僵尸进程或不再可用的进程,才能找到仍然打开的端口。如果您知道进程名称或 PID,那么使用 、 和 等命令会非常pfilespreap帮助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

这将打印 PID、进程名以及为匹配 $1 的任何进程打开的任何套接字。

一旦您确切地知道哪个 PID 使该套接字保持打开状态并且不可用,您可以使用pkillpreap命令之一强制关闭该 PID 及其打开的文件描述符。

答案2

如果端口仍处于侦听状态,则应用程序仍在以某种方式运行。使用命令lsof-i检查哪个进程仍在监听并杀死它。

如果您没有拉索夫安装工具后,您必须搜索聚苯乙烯-EF对于仍在运行的应用程序进程。

相关内容