我有一台启用了 SSH 的 Solaris 10 服务器,我想找出哪个特定进程负责打开侦听端口 22 的套接字。我使用该实用程序PFiles
循环遍历/proc
文件夹中的所有进程,以使用以下简单脚本找出答案:
PORT=22; for PID in /proc/*; do pfiles ${PID} |grep "port: ${PORT}" && echo ${PID}; done
我发现有多个进程正在监听同一个端口。示例输出如下:
sockname: AF_INET6 ::ffff:10.192.18.188 port: 22 /proc/26766
sockname: AF_INET6 ::ffff:10.192.18.188 port: 22 /proc/26767
sockname: AF_INET6 :: port: 22 /proc/620
sockname: AF_INET6 ::ffff:10.192.18.188 port: 22 /proc/9131
sockname: AF_INET6 ::ffff:10.192.18.188 port: 22 /proc/9132
我的问题是,这怎么可能呢?多个进程可以在同一个 IP 地址上监听同一个端口吗?如果可以的话,所有这些进程 ID 是否共享一个绑定到此地址:端口的套接字,或者打开多个套接字,每个套接字监听同一个地址:端口,内核决定在特定时刻将连接传递给哪个套接字?有人可以解释一下吗?谢谢!