从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
始终显示服务器和客户端进程吗?
netstat
GNU 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
进程的打开套接字。