Выход из команды ping

My Perl script застревает с exit status при попытке использовать команду ping.

Ответ 1

Google - ваш друг.

Четвертая ссылка вниз 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 - ошибка.