ping命令的退出状态

时间:2009-05-28 15:15:49

标签: unix

尝试使用exit status命令时,我的Perl脚本卡住ping

6 个答案:

答案 0 :(得分:24)

根据this网站:

  

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

列出结果:

  • 成功:代码0
  • 无回复:代码1
  • 其他错误:代码2

请注意,我链接的页面显示“Linux / Unix ping命令”,但其他系统,甚至Linux和Unix的变体,可能会改变此值。

如果可能的话,我会测试相关系统以确保你有合适的系统。

答案 1 :(得分:11)

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

可解析的主机

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

返回:

2

不可解析的主机

ping -c 1 sdhjfjsd  ;  echo $?

回复:

ping: cannot resolve sdhjfjsd: Unknown host

返回:

68

答案 2 :(得分:10)

  

ping实用程序返回一个退出   如果至少有一个,则状态为零   从指定的听到的回应   主办;如果是,状态为2   传输成功但没有   收到答复;或其他   值(from)如果有错误   发生。

http://www.manpagez.com/man/8/ping

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

成功连接将始终返回代码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

答案 5 :(得分:0)

你还应该考虑到,如果ping例如收到'网络不可达'icmp回复,它将被计为回复,因此返回成功状态0(在Windows上使用cygwin ping测试)。因此,如果主机处于活动状态并且IMO是一个错误,那么测试并不是很有用。