Unix ping命令的退出状态

Unix ping命令的退出状态,unix,Unix,在尝试使用ping命令时,我的Perl脚本陷入了退出状态 ping实用程序返回一个出口 如果至少有一个,则状态为零 当局已收到指定人士的回应 主办如果出现以下情况,则状态为2 传输成功,但没有成功 收到答复;还是别的 如果出现错误,则返回值(从) 发生了 实际返回值可能取决于您的系统。根据网站: 如果ping根本没有收到任何回复数据包,它将以代码1退出。如果同时指定了数据包计数和截止日期,并且截止日期到达时收到的数据包少于计数,则它也将以代码1退出。在其他错误时,它退出,代码为2否则退出,代码

在尝试使用
ping
命令时,我的Perl脚本陷入了
退出状态

ping实用程序返回一个出口 如果至少有一个,则状态为零 当局已收到指定人士的回应 主办如果出现以下情况,则状态为2 传输成功,但没有成功 收到答复;还是别的 如果出现错误,则返回值(从) 发生了

实际返回值可能取决于您的系统。

根据网站:

如果ping根本没有收到任何回复数据包,它将以代码1退出。如果同时指定了数据包计数和截止日期,并且截止日期到达时收到的数据包少于计数,则它也将以代码1退出。在其他错误时,它退出,代码为2否则退出,代码为0。这使得可以使用退出代码查看主机是否处于活动状态

要列出结果,请执行以下操作:

  • 成功:代码0
  • 没有答复:代码1
  • 其他错误:代码2
请注意,我链接到的页面显示“Linux/Unix ping命令”,但其他系统,甚至可能是Linux和Unix的变体,可能会改变此值


如果可能的话,我会在有问题的系统上进行测试,以确保您拥有正确的系统。

从命令行尝试
man ping
。返回值列在底部附近。

值得在您的操作系统上对此进行一些测试。e、 OSX上的g

启动的可解析主机

ping -c 1 google.com ;  echo $?
答复:

PING google.com (173.194.38.14): 56 data bytes
64 bytes from 173.194.38.14: icmp_seq=0 ttl=51 time=16.878 ms

--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 16.878/16.878/16.878/0.000 ms
返回

0
已关闭/未响应ping的可解析主机

ping -c 1 localhost  ;  echo $?
答复:

PING stuart-woodward.local (127.0.0.1): 56 data bytes

--- stuart-woodward.local ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
ping: cannot resolve sdhjfjsd: Unknown host
返回:

2
68
不可解析主机

ping -c 1 sdhjfjsd  ;  echo $?
答复:

PING stuart-woodward.local (127.0.0.1): 56 data bytes

--- stuart-woodward.local ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
ping: cannot resolve sdhjfjsd: Unknown host
返回:

2
68

成功的连接将始终返回代码0,而失败的连接将始终返回代码1及以上

要测试这一点,请尝试此代码段

#!/bin/bash
light_red='\e[1;91m%s\e[0m\n'                     
light_green='\e[1;92m%s\e[0m\n'                   
ping -c 4 -q google.comz                          
if [ "$?" -eq 0 ]; then                           
  printf "$light_green" "[ CONNECTION AVAILABLE ]"
else                                              
  printf "$light_red" "[ HOST DISCONNECTED ]"     
fi

您还应考虑到,如果ping(例如)接收到“网络不可访问”icmp应答,它将被计为应答,因此返回成功状态0(在windows上使用cygwin ping进行测试)。因此,对于测试主机是否处于活动状态并且是否存在bug来说,这并不是真正有用的。

这可能属于on。不,它们不是。例如,如果您没有给GNU ping足够的时间发送所有数据包,它似乎会返回255。我的ping手册页没有退出状态部分(mint 17)坏参数…:/