실행하면 netstat -nptl
다음과 같은 이상한 결과가 나타납니다.
tcp 0 0 127.0.2.1:53 0.0.0.0:* LISTEN 1/init
이는 dnscrypt-proxy
DoH 서비스의 기본 구성입니다.
ps uww 1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 166580 11936 ? Ss 12:15 0:01 /sbin/init splash
왜 PID 1이 지금은 의미가 없는지 궁금합니다.
답변1
Linux에서는 더 많은 정보를 제공하므로 using을 netstat
using으로 바꿔야 합니다 . ss
이 경우 다음을 제공합니다.모두소켓을 공유하는 프로세스는 netstat
첫 번째 프로세스와 동시에 중지됩니다. comm
name( systemd
) 대신 cmd
name( ) 을 제공하는 등 미묘한 차이점도 있습니다 init
. 이것은 Debian 12이지만 모든 systemd 기반 Linux 시스템은 비슷합니다.
# netstat -tnlp | awk 'NR <=2 || /127.0.2.1:/'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.2.1:53 0.0.0.0:* LISTEN 1/init
# ss -nptl src 127.0.2.1
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.2.1:53 0.0.0.0:* users:(("dnscrypt-proxy",pid=6245,fd=8),("systemd",pid=1,fd=49))
둘 다 동일한 소켓을 systemd
공유하는 것을 볼 수 있습니다 .dnscrypt-proxy
왜? 왜냐면 dnscrypt-proxy
실행 중이기는 하지만체계~의소켓 활성화: 유사한 메커니즘인트라넷그러나 데몬이 실제로 실행되기 전에 소켓 수신 대기를 허용하여(구성된 경우) 데몬이 첫 번째 호출에서 시작되도록 준비하도록 개선되었습니다. 언제체계 서비스 구성관련이 있습니다체계 소켓 구성(여기서는 충분한 종속성이 있음 Requires=dnscrypt-proxy.socket
) 이는 소켓 활성화를 사용하고 있음을 의미합니다.
# systemctl status dnscrypt-proxy.socket
* dnscrypt-proxy.socket - dnscrypt-proxy listening socket
Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.socket; enabled; preset: enabled)
Active: active (running) since Tue 2024-01-09 18:16:11 UTC; 23min ago
Triggers: * dnscrypt-proxy.service
Docs: https://github.com/DNSCrypt/dnscrypt-proxy/wiki
Listen: 127.0.2.1:53 (Stream)
127.0.2.1:53 (Datagram)
Tasks: 0 (limit: 18402)
Memory: 12.0K
CPU: 1ms
CGroup: /system.slice/dnscrypt-proxy.socket
[...]
# systemctl status dnscrypt-proxy.service
* dnscrypt-proxy.service - DNSCrypt client proxy
Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-01-09 18:38:54 UTC; 1min 20s ago
TriggeredBy: * dnscrypt-proxy.socket
Docs: https://github.com/DNSCrypt/dnscrypt-proxy/wiki
Main PID: 6245 (dnscrypt-proxy)
Tasks: 12 (limit: 18402)
Memory: 10.6M
CPU: 60ms
CGroup: /system.slice/dnscrypt-proxy.service
`-6245 /usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml
[...]
소켓 생성은 해당 섹션과 연관된 섹션을 systemd
통해 직접 처리되며 청취 소켓은 상속됩니다 (이 메서드를 알아야 함)..socket
.service
dnscrypt-proxy
이 접근 방식에는 여러 가지 장점이 있습니다. 적어도 다음 두 가지(다른 것들은소켓 활성화링크):
- 데몬은 시작할 때에도 권한 있는 포트를 열기 위한 권한으로 실행할 필요가 없습니다.
- 데몬은 일정 기간 동안 활동이 없으면 중지하여 시스템 리소스를 확보할 수 있습니다.체계새로운 쿼리가 수신되면 연결을 거부하지 않고 다시 시작됩니다.