
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
実行されるのを防ぐオプションが追加されました。kill
ps
- ヘッダー行を削除するために、LinuxとFreeBSDでは意味が異なるため、列ヘッダーテキストを空白のままにするオプションを
ps
使用しました。-o pid=
h
h
- Linuxでは
ps
明示的なオプションがサポートされていますが、--no-headers
FreeBSDではそうではありません。
- Linuxでは
- コマンドをテスト条件
sleep
に移動while
- 不要な引用を削除しました。
- FreeBSDに移植
- この回答のおかげで私はできますtcshで1行のwhileループを書くそれは結局私を必要とする印刷$使用
awk
- この回答のおかげで私はできますtcshで1行のwhileループを書くそれは結局私を必要とする印刷$使用
答え4
試してくださいCtrl+4
次の行が表示されます。
312/312 packets, 0% loss, min/avg/ewma/max = 0.312/1.236/0.505/208.655 ms