为什么“netstat”不显示 Screen 客户端而只显示 Screen 服务器进程?

为什么“netstat”不显示 Screen 客户端而只显示 Screen 服务器进程?

https://unix.stackexchange.com/a/485290/674

输出中的更下方netstat是 UNIX 套接字:

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
<snip>
unix  2      [ ACC ]     STREAM     LISTENING     21936    1/systemd            /run/dbus/system_bus_socket
<snip>
unix  3      [ ]         STREAM     CONNECTED     28918    648/dbus-daemon      /run/dbus/system_bus_socket

我们可以看到这两个进程都在使用 UNIX 套接字 /run/dbus/system_bus_socket。因此,如果您知道其中一个过程,那么看到这一点,您应该能够确定另一端。

这是否意味着任何一对基于 Unix 域套接字的服务器和客户端进程都应该出现在netstat上面的输出中?换句话说,应该netstat始终显示服务器和客户端进程吗?

netstatGNU Screen 也作为基于 Unix 域套接字的服务器和客户端进程运行,因此它们应该出现在?的输出中吗?为什么netstat实际上不显示 Screen 客户端,而只显示 Screen 服务器进程,如下所示,

$ sudo netstat -ap | grep -i screen 
unix  2   [ ACC ]  STREAM  LISTENING  4533106  27525/SCREEN   /run/screen/S-t/27525.test

同时ps显示两者?

$ ps aux | grep -i screen
t        19686  0.0  0.0  45096  3292 pts/7    S+   22:19   0:00 screen -r test
t        27525  0.0  0.0  45780  3292 ?        Ss   07:22   0:00 SCREEN -S test

谢谢。

答案1

screen进程在运行时不维护套接字连接;当有消息要发送时,它们会根据需要打开和关闭套接字连接。因此,当您运行screen -r重新连接到现有会话时,它会使用套接字连接到现有进程,协商各种设置,并且当一切顺利时,连接到适当的终端,并关闭套接字。

这意味着当您运行 时netstat,除非您恰好在两个screen进程正在通信时执行此操作(这种情况并不经常发生),否则您不会看到连接两个screen进程的打开套接字。

相关内容