Gnu-Screen

為什麼netstat不顯示Screen客戶端而只顯示Screen伺服器程序?

  • December 7, 2018

來自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程序的打開套接字。

引用自:https://unix.stackexchange.com/questions/486058