我的Perl脚本在尝试使用ping命令时被exit status卡住了。
ping
exit status
lmyy7pcs1#
根据this网站:如果ping没有接收到任何应答包,它将以代码1退出。如果同时指定了数据包计数和截止日期,并且在截止日期到达时收到的数据包少于计数,则它也将以代码1退出。在其他错误时,它退出,代码为2。否则退出,代码为0。这样就可以使用退出代码来查看主机是否处于活动状态。要列出结果,请执行以下操作:
请注意,我链接到的页面上写着“Linux/Unix ping命令”,但其他系统,甚至Linux和Unix的变体,可能会改变这个值。如果可能的话,我会在有问题的系统上进行测试,以确保您拥有正确的系统。
4dc9hkyq2#
值得在你的操作系统上做一些测试。例如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
kq0g1dla3#
如果从指定主机至少听到一个响应,则ping实用程序返回退出状态零;如果传输成功但没有接收到响应,则状态2;或另一个值(from),如果发生错误。http://www.manpagez.com/man/8/ping实际返回值可能取决于您的系统。
0pizxfdo4#
你还应该考虑到,如果ping例如收到一个'网络无法到达' icmp回复,它将被视为回复,因此返回成功状态0(在windows上用cygwin ping测试)。所以对于测试一个主机是否活着和IMO是否有bug并不是很有用。下面是一个来自Git Bash的例子,显示了0的退出值,尽管遇到了一个明显的错误:
$ ping -n 1 172.27.27.48 ; echo $? Pinging 172.27.27.48 with 32 bytes of data: Reply from 172.31.100.2: Destination host unreachable. Ping statistics for 172.27.27.48: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), 0
nr9pn0ug5#
成功连接将始终返回code 0,而失败连接将始终返回code 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
vu8f3i0k6#
从命令行尝试man ping。返回值列在底部附近。
man ping
6条答案
按热度按时间lmyy7pcs1#
根据this网站:
如果ping没有接收到任何应答包,它将以代码1退出。如果同时指定了数据包计数和截止日期,并且在截止日期到达时收到的数据包少于计数,则它也将以代码1退出。在其他错误时,它退出,代码为2。否则退出,代码为0。这样就可以使用退出代码来查看主机是否处于活动状态。
要列出结果,请执行以下操作:
请注意,我链接到的页面上写着“Linux/Unix ping命令”,但其他系统,甚至Linux和Unix的变体,可能会改变这个值。
如果可能的话,我会在有问题的系统上进行测试,以确保您拥有正确的系统。
4dc9hkyq2#
值得在你的操作系统上做一些测试。例如OSX
可解析的主机,已启动
回复:
退货
可解析主机宕机/ping无响应
回复:
退货:
无法解析的主机
回复:
退货:
kq0g1dla3#
如果从指定主机至少听到一个响应,则ping实用程序返回退出状态零;如果传输成功但没有接收到响应,则状态2;或另一个值(from),如果发生错误。
http://www.manpagez.com/man/8/ping
实际返回值可能取决于您的系统。
0pizxfdo4#
你还应该考虑到,如果ping例如收到一个'网络无法到达' icmp回复,它将被视为回复,因此返回成功状态0(在windows上用cygwin ping测试)。所以对于测试一个主机是否活着和IMO是否有bug并不是很有用。
下面是一个来自Git Bash的例子,显示了
0
的退出值,尽管遇到了一个明显的错误:nr9pn0ug5#
成功连接将始终返回code 0,而失败连接将始终返回code 1及以上。
要测试这一点,请尝试以下代码片段
vu8f3i0k6#
从命令行尝试
man ping
。返回值列在底部附近。