Linux(Ubuntu 20.04でテスト済み)

Linux(Ubuntu 20.04でテスト済み)

ping実行を停止せずに一般的な終了統計を表示するように指示する方法はありますか?

たとえば、次をすばやく見たいと思います。

--- 8.8.8.8 ping statistics ---
2410 packets transmitted, 2274 received, +27 errors, 5% packet loss, time 2412839ms
rtt min/avg/max/mdev = 26.103/48.917/639.493/52.093 ms, pipe 3

プログラムを停止したり、蓄積されたデータを失う必要はありません。

答え1

マンページから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

答え2

実行中にping統計を取得するより簡単な方法があります。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

答え3

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+ |;CTRL4

1 つ以上の既知の PID に送信

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(FreeBSD 11.3に基づいてpfSense 2.4.5でテスト済み)

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

1 つ以上の既知の PID に送信

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結果がないときにpidなしでxargs実行されるのを防ぐオプションが追加されました。killps
  • ヘッダー行を削除するために、LinuxとFreeBSDでは意味が異なるため、列ヘッダーテキストを空白のままにするオプションをps使用しました。-o pid=hh
    • Linuxではps明示的なオプションがサポートされていますが、--no-headersFreeBSDではそうではありません。
  • コマンドをテスト条件sleepに移動while
  • 不要な引用を削除しました。
  • FreeBSDに移植

答え4

試してくださいCtrl+4

次の行が表示されます。

312/312 packets, 0% loss, min/avg/ewma/max = 0.312/1.236/0.505/208.655 ms

関連情報