我试图更好地理解我看到的行为 - 我控制了正在运行 TFTP 的服务器并试图将其关闭。我已经运行了:
systemctl stop tftp
systemctl stop xinetd
但是,当停止 tftp 服务时,它会说
警告:停止 tftp.service,但仍可以通过以下方式激活:tftp.socket
ss -lnpu
之后给我
UNCONN 0 0 :::69
:::* users:(("systemd",pid=1,fd=60))
我检查了一下,端口确实还在监听,但 PID 被列为 systemd?我不明白这种行为 - TFTP 是如何由 systemd 直接运行的?
编辑:我发现还有另一个名为 tftp.socket 的“服务”在运行,在我终止 tftp.service 后,该服务仍使套接字保持打开状态。我仍然不明白为什么这会显示为系统 pid 的一部分。
答案1
启动 tftp 服务器来处理 tftp 请求。由于没有这样的请求,因此systemd
不启动 tftp 服务器。但需要有一个进程来监听端口 69 上的传入请求,否则该请求将进入 bitbucket。
该进程是 systemd。
当端口 69 上的请求到来时,systemd 会分叉一个 tftp 服务器来处理该请求。当 tftp 服务器处理完毕后,它就会死机。