ping中に統計情報を表示するショートカット(MacでもLinuxでもWindowsでも)
pingを打ち続けている最中に、平均遅延時間や平均ロス率などを知りたい、でもここで止めたら最初からやりなおし、ぐぬぬ、といった経験ありませんか?ありますよね?ね?
実は大抵のpingコマンドには、ping中に統計情報を表示する機能が実装されています。
BSD系(Mac OS X含む)の場合、Ctrl+t(SIGINFO)で
manに記載がありました。
If ping receives a SIGINFO (see the status argument for stty(1)) signal, the current number of packets sent and received, and the minimum, mean, and maximum of the round-trip times will be written to the standard error output.
SIGINFOを送れば統計情報が表示されます。SIGINFOはCTRL+tで送ることができます(Mac OS X標準のTerminalの場合)。
% ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.050 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.072 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.082 ms (←ここでCTRL+t) load: 0.22 cmd: ping 22171 running 0.00u 0.00s 3/3 packets received (100.0%) 0.050 min / 0.068 avg / 0.082 max 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.061 ms
iTermはCtrl+tでSIGINFOが送られないようです。そんな場合はkillコマンドで送りましょう。
% kill -INFO <pingのPID>
Linux(iputils)の場合、CTRL+\(SIGQUIT)で
manによると、iputilsのpingにはSIGQUITを送ればいいようです。
Shorter current statistics can be obtained without termination of process with signal SIGQUIT.
一般的なターミナルであれば、CTRL+\でSIGQUITを送ることができます。
$ ping PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.027 ms 64 bytes from 127.0.0.1: icmp_req=2 ttl=64 time=0.025 ms 64 bytes from 127.0.0.1: icmp_req=3 ttl=64 time=0.024 ms (←ここでCTRL+\) 3/3 packets, 0% loss, min/avg/ewma/max = 0.024/0.025/0.026/0.027 ms 64 bytes from 127.0.0.1: icmp_req=4 ttl=64 time=0.030 ms ...
CTRL+\が利かない場合はkillコマンドでどうぞ。
$ kill -QUIT <pingのPID>
Windowsの場合、CTRL+Breakで
pingコマンドのヘルプに書かれてました。
> ping Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name Options: -t Ping the specified host until stopped. To see statistics and continue - type Control-Break; To stop - type Control-C.
え?Breakって何?そんなキーあったっけ?
えぇ、あります。キーボードを良くみてください。PrintScreenキー、ScrollLockキーの横あたりにPause/Breakキーがありませんか?
それです。ノートパソコンの場合、Fnキーを押しながらかもしれません。
> ping -t 127.0.0.1 Pinging 127.0.0.1 with 32 bytes of data: Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 (←ここでCTRL+Break) Ping statistics for 127.0.0.1: Packets: Sent = 6, Received = 6, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Control-Break Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
注意 一部のping実装では使えません(例えばbusyboxとか)
busybox pingにSIGQUITを送ると統計情報も出さずに即終了してしまうので注意しましょう。
# busybox ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.050 ms 64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.049 ms 64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.056 ms (←ここでCTRL+\) # (←統計情報は表示されずプロンプトに戻った)
他にもddコマンドでUSR1とか
ddコマンドにSIGUSR1を送ると途中経過を表示することができます。
コマンドによって何を送るべきかは異なるので、それぞれ調べてから使いましょう。