My Perl script застревает с exit status
при попытке использовать команду ping
.
Выход из команды ping
Ответ 1
Четвертая ссылка вниз this, которая гласит:
Если ping делает не получать никаких ответов пакетов вообще, он выйдет с кодом 1. Если оба значения пакета и крайний срок указаны, и к тому времени, когда крайний срок был получен, будет получено меньше, чем количество пакетов, оно также выйдет с кодом 1. В другая ошибка завершается с кодом 2. В противном случае он выйдет с кодом 0. Это позволяет использовать код выхода, чтобы узнать, жив ли хост.
Чтобы перечислить результаты:
- Успех: код 0
- Нет ответа: код 1
- Другие ошибки: код 2
Обратите внимание, что страница, на которую я ссылаюсь, говорит "команда ping Linux/Unix", но другие системы или, возможно, даже варианты Linux и Unix могут варьировать это значение.
Если возможно, я проверил бы на рассматриваемой системе, чтобы убедиться, что у вас есть правильные.
Ответ 2
Утилита ping возвращает выход статус нуля, если хотя бы один ответ был услышан из указанного хозяйничать; статус двух, если передача прошла успешно, но нет ответы были получены; или другие value (from), если ошибка произошло.
http://www.manpagez.com/man/8/ping
Фактические значения возврата могут зависеть от вашей системы.
Ответ 3
Стоит сделать некоторое тестирование на этой ОС. например, 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
Ответ 4
Попробуйте man ping
из командной строки. Возвращаемые значения перечислены в нижней части.
Ответ 5
Успешное соединение всегда будет возвращать код 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
Ответ 6
Вы также должны учитывать, что если пинг, например, получает ответ "ICMP-сообщение недоступен", он будет засчитываться как ответ a, таким образом, возвращает статус успеха 0 (протестирован с помощью cygwin ping на окнах). Так что не очень полезно для тестирования, если хост жив, а IMO - ошибка.