Проверьте статистику ping без остановки

Если то, что Вы действительно хотите, должно только подключить ноутбук к Вашей сети, проверьте, имеет ли это слот PCMCIA или PC Card. Большинство ноутбуков, даже очень старые, должно иметь это. Затем можно найти подержанную плату Ethernet PCMCIA почти для ничего.

30
10.07.2014, 21:05
5 ответов

Из меню ping (выделено мое):

Когда заданное количество пакетов отправлено (и получено) или если программа завершается с помощью SIGINT, отображается краткая сводка. Краткая текущая статистика может быть получена без завершения процесса с помощью сигнала SIGQUIT.

Так что это сработает, если вы не против, чтобы ваша статистика была чуть менее многословной:

# the second part is only for showing you the PID
ping 8.8.8.8 & jobs ; fg

<... in another terminal ...>

kill -SIGQUIT $PID

Краткая статистика выглядит так:

19/19 packets, 0% loss, min/avg/ewma/max = 0.068/0.073/0.074/0.088 ms
36
27.01.2020, 19:38

Если ваш ping не поддерживает полезный SIGQUIT (AIX, Solaris), вот одно обходное решение -- бесконечный цикл ping, в котором каждый ping делает только (например) 10 пингов, так что вы можете видеть промежуточные результаты.

while :; do ping -c 10 $HOST; done

Чтобы остановить это, Control-C может только убить команду ping; вам может понадобиться приостановить, а затем убить задание (Control-z; kill %).

Это, конечно, не дает истинной статистики работы - только за время этих 10 пингов.

1
27.01.2020, 19:38

Есть еще один простой способ получить статистику проверки связи во время его выполнения: Просто нажмите Ctrl + | ( вертикальная косая черта или его также называют конвейерной линией)

Лично я использую его очень часто, попробуйте:

64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=0.893 ms
64 bytes from 192.168.1.1: icmp_seq=23 ttl=64 time=0.862 ms
64 bytes from 192.168.1.1: icmp_seq=24 ttl=64 time=3.18 ms
64 bytes from 192.168.1.1: icmp_seq=35 ttl=64 time=0.877 ms
64 bytes from 192.168.1.1: icmp_seq=36 ttl=64 time=0.866 ms
**36/36 packets, 0% loss, min/avg/ewma/max = 0.832/0.993/0.930/3.185 ms**
64 bytes from 192.168.1.1: icmp_seq=37 ttl=64 time=0.909 ms
64 bytes from 192.168.1.1: icmp_seq=38 ttl=64 time=2.03 ms
64 bytes from 192.168.1.1: icmp_seq=39 ttl=64 time=0.839 ms
64 bytes from 192.168.1.1: icmp_seq=40 ttl=64 time=0.880 ms
12
27.01.2020, 19:38

Попробуйте Ctrl + 4

Здесь показана вот такая строка:

312/312 packets, 0% loss, min/avg/ewma/max = 0.312/1.236/0.505/208.655 ms
6
27.01.2020, 19:38

Linux (Протестировано на Ubuntu 20.04)

Отправьте сигнал SIGQUIT.

Пример вывода:

64 bytes from localhost (127.0.0.1): icmp_seq=138 ttl=64 time=0.021 ms
64 bytes from localhost (127.0.0.1): icmp_seq=139 ttl=64 time=0.022 ms
139/139 packets, 0% loss, min/avg/ewma/max = 0.014/0.022/0.022/0.057 ms
64 bytes from localhost (127.0.0.1): icmp_seq=140 ttl=64 time=0.090 ms
64 bytes from localhost (127.0.0.1): icmp_seq=141 ttl=64 time=0.025 ms

Отправка во время работы

CTRL + \ = quitсогласно stty -a.
Они также работают:CTRL + | ; CTRL + 4 ;

Отправить одному или нескольким известным pids

kill -SIGQUIT <pid> [...]

Отправить всем работающим

ps -o pid= -C ping | xargs -r kill -SIGQUIT

Периодически отправлять всем работающим

while sleep 20; do ps -o pid= -C ping | xargs -r kill -SIGQUIT; done

В качестве фонового задания

while sleep 20; do ps -o pid= -C ping | xargs -r kill -SIGQUIT; done &

FreeBSD (Протестировано на pfSense 2.4.5 на основе FreeBSD 11.3)

Отправьте сигнал INFO.

Пример вывода при отправке через CTRL + T:

64 bytes from 127.0.0.1: icmp_seq=137 ttl=64 time=0.328 ms
64 bytes from 127.0.0.1: icmp_seq=138 ttl=64 time=0.028 ms
load: 0.18  cmd: ping 62483 [select] 144.69r 0.00u 0.01s 0% 2256k
139/139 packets received (100.0%) 0.018 min / 0.072 avg / 0.505 max
64 bytes from 127.0.0.1: icmp_seq=139 ttl=64 time=0.116 ms
64 bytes from 127.0.0.1: icmp_seq=140 ttl=64 time=0.027 ms

Пример вывода при отправке черезkill:

64 bytes from 127.0.0.1: icmp_seq=137 ttl=64 time=0.328 ms
64 bytes from 127.0.0.1: icmp_seq=138 ttl=64 time=0.028 ms
139/139 packets received (100.0%) 0.018 min / 0.072 avg / 0.505 max
64 bytes from 127.0.0.1: icmp_seq=139 ttl=64 time=0.116 ms
64 bytes from 127.0.0.1: icmp_seq=140 ttl=64 time=0.027 ms

Отправка во время работы

CTRL + T = statusсогласно stty -a.

Отправить одному или нескольким известным pids

kill -INFO <pid> [...]

Отправить всем работающим

ps -o comm= -o pid= | egrep '^ping[[:space:]]' | awk -F' ' '{print $2}' | xargs -r kill -INFO

Периодически отправлять всем работающим

printf "while ({ sleep 20 })\nps -o comm= -o pid= | egrep '^ping[[:space:]]' | awk -F' ' '{print \0442}' | xargs -r kill -INFO\nend\n" | tcsh

В качестве фонового задания

printf "while ({ sleep 20 })\nps -o comm= -o pid= | egrep '^ping[[:space:]]' | awk -F' ' '{print \0442}' | xargs -r kill -INFO\nend\n" | tcsh &

Примечания и благодарности

Спасибо @pmos за ваш ответ, который в первую очередь зародил мою идею периодического метода, а также за все остальные ответы и комментарии, которые способствовали этому.

Спасибо, @VictorYarema, за предложение превратить мой комментарий в реальный ответ. Суть метода в исходном комментарии та же,но со временем эволюционировало следующим образом:

  • Добавлен параметр -rв xargs, чтобы предотвратить запуск killбез pid при отсутствии результатов отps
  • Чтобы избавиться от строки заголовка в ps, я использовал параметр -o pid=, чтобы сделать текст заголовка столбца пустым вместо h, поскольку hимеет разные значения для Linux и FreeBSD.
    • В то время как psподдерживает явный параметр --no-headersв Linux, это не так для FreeBSD
  • Команда sleepперемещена в условие проверки while
  • Удалены ненужные кавычки
  • Перенесено на FreeBSD
5
01.05.2020, 03:26

Теги

Похожие вопросы