"netstat"가 Screen 클라이언트를 표시하지 않고 Screen 서버 프로세스만 표시하는 이유는 무엇입니까?

"netstat"가 Screen 클라이언트를 표시하지 않고 Screen 서버 프로세스만 표시하는 이유는 무엇입니까?

~에서https://unix.stackexchange.com/a/485290/674

출력의 아래쪽에는 netstatUNIX 소켓이 있습니다.

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않는 한 두 프로세스를 연결하는 열린 소켓이 표시되지 않습니다.screenscreen

관련 정보