Выход из состояния команды ping - PullRequest
17 голосов
/ 28 мая 2009

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

Ответы [ 6 ]

25 голосов
/ 28 мая 2009

Согласно этому сайту:

Если ping не вообще не получит ни одного ответа пакетов, он завершится с кодом 1 . Если указано количество пакетов и крайний срок, и к моменту наступления крайнего срока получено меньше пакетов, чем количество пакетов, он также завершится с кодом 1. При другой ошибке он завершится с кодом 2 . В противном случае выходит с кодом 0 . Это позволяет использовать код завершения, чтобы увидеть, жив хост или нет.

Для отображения результатов:

  • Успех: код 0
  • Нет ответа: код 1
  • Другие ошибки: код 2

Обратите внимание, что на странице, на которую я ссылаюсь, написано "команда ping для Linux / Unix", но другие системы или, возможно, даже варианты Linux и Unix могут изменить это значение.

Если возможно, я бы проверил на рассматриваемой системе, чтобы убедиться, что у вас есть нужные.

11 голосов
/ 02 октября 2014

Стоит провести некоторое тестирование этого на вашей ОС. например, на 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 -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
10 голосов
/ 28 мая 2009

Утилита ping возвращает выход статус ноль, если хотя бы один был услышан ответ от указанного хозяйничать; статус двух, если передача прошла успешно, но нет ответы были получены; или другой значение (с) если ошибка произошло.

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

Фактические возвращаемые значения могут зависеть от вашей системы.

0 голосов
/ 02 июня 2016

Вам также следует принять во внимание, что если пинг, например, получает ответ icmp «сеть недоступна», он будет засчитан как ответ и, таким образом, вернет статус успеха 0 (проверено с помощью пинга cygwin на windows). Так что не очень полезно для тестирования, если хост жив и IMO ошибка.

0 голосов
/ 17 марта 2016

Успешное соединение всегда будет возвращать код 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
0 голосов
/ 28 мая 2009

Попробуйте man ping из командной строки. Возвращаемые значения перечислены внизу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...