Gnu-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
始終顯示伺服器和客戶端程序?GNU Screen 還作為基於 Unix 域套接字的伺服器和客戶端程序執行,所以它們應該出現在
netstat
? 為什麼netstat
實際上不顯示螢幕客戶端,而只顯示螢幕伺服器程序,如下所示,$ 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
謝謝。
screen
程序在執行時不維護套接字連接;當他們有消息要發送時,他們會根據需要打開和關閉套接字連接。因此,當您執行screen -r
以重新連接到現有會話時,它會使用套接字連接到現有程序,協商各種設置,當一切順利時,連接到適當的終端並關閉套接字。這意味著當您執行時
netstat
,除非您恰好在兩個screen
程序正在通信時這樣做(這種情況並不經常發生),否則您不會看到連接兩個screen
程序的打開套接字。