![为什么 ping 在 Linux 中默认永远运行?](https://linux22.com/image/81405/%E4%B8%BA%E4%BB%80%E4%B9%88%20ping%20%E5%9C%A8%20Linux%20%E4%B8%AD%E9%BB%98%E8%AE%A4%E6%B0%B8%E8%BF%9C%E8%BF%90%E8%A1%8C%EF%BC%9F%20.png)
将 ping 的默认行为设置为永远 ping 的设计决策的基本原理是什么?
例如,以下基本用法将永远 ping 地址 127.0.0.1:
$ ping 127.0.0.1
根据维基百科, ping 用于:
测试 Internet 协议 (IP) 网络上主机的可达性,并测量从起始主机发送到目标计算机并返回的消息的往返时间。
在这两个用例(可达性和往返时间/延迟)中,永远 ping 可能不是最好的选择期望行为,这就是为什么我觉得这是奇怪的默认行为。
顺便说一句,考虑到没有提供退出的用户界面机制,除了像ctrl+这样的东西c,这似乎有点不精致,这似乎更奇怪。
当然ping的数量可以可选地如果使用计数参数(-c)则受到限制,例如:
$ ping -c 3 127.0.0.1
[编辑]:
为了澄清这一点,我希望有人可以提供某种参考,其中提到实际开发人员决定默认行为的原因,而不是基于意见的答案。也许文档或代码注释存在于哪个文档中?
我发现这个问题目前被搁置,因为它主要是基于意见的,所以我试图让它不那么如此。
答案1
假设您想要在主机 A 和 B 之间建立一条路由。
在主机 A 上,您运行 ping B。最初,它不起作用。
在主机 B 或某些防火墙上,您对网络配置进行了更改,一旦应用,您几乎立即就会看到您的更改生效了。
所以,这样做非常实用。否则你就必须写while ! ping B; do :; done
,这是更多的工作。
最后所有这类问题一般都会以“因为当时系统资源限制”或者“常识”而告终。在这种情况下,这是“常识”。
答案2
不同的实现,不同的选择。
在 iputils-ping(在 Linux 上)中,默认情况下 ping 是连续的,而在 Solaris 上,您需要使用该-s
选项来获得该行为。这对于持续监控网络状态很有用。
在 Solaris 上,ping
在第一个返回的数据包后成功退出的默认行为使得在脚本中使用来测试连接变得更容易,而使用 iputils-ping 您必须使用ping -c1 -w15
以获得(类似的)相同的行为。
两者在不同情况下都有用。
不同的开发商,不同的选择。