当我运行时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 现在没有意义了
在 Linux 上 using
netstat
应替换为 usingss
,因为它提供了更多信息。对于这种情况,它提供共享套接字的所有netstat
进程,同时在第一个进程停止。还有其他细微差别,例如提供comm
名称 (systemd
) 而不是cmd
名称 (init
)。这里是 Debian 12,但任何基于 systemd 的 Linux 系统都会类似:可以看到两者
systemd
共享dnscrypt-proxy
同一个套接字。为什么?因为
dnscrypt-proxy
正在通过systemd的Socket Activation运行:一种类似于inetd但经过改进的机制,允许(如果如此配置)在守护进程实际运行之前进行套接字侦听,准备在第一次调用时启动守护进程。当systemd 服务配置具有关联的systemd 套接字配置(此处具有足够的依赖性Requires=dnscrypt-proxy.socket
)时,这意味着它正在使用套接字激活。套接字的创建是通过与该部分关联的部分直接处理的
systemd
,.socket
然后.service
该侦听套接字被继承dnscrypt-proxy
(必须知道此方法)。这种方法有多种优点,其中至少有这两个(其他在套接字 激活链接中进行了描述):