web-dev-qa-db-ja.com

Linuxでpingがデフォルトで永久に実行されるのはなぜですか?

Pingのデフォルトの動作を永久にpingにするという設計上の決定の根拠は何でしたか?

たとえば、次の基本的な使用法では、アドレス127.0.0.1に永久にpingを実行します。

$ ping 127.0.0.1

Wikipedia によると、pingは次の目的で使用されます。

インターネットプロトコル(IP)ネットワーク上のホストの到達可能性をテストし、発信元ホストから宛先コンピューターに送受信されるメッセージのラウンドトリップ時間を測定します。

これらのユースケース(到達可能性とラウンドトリップ時間/遅延)の両方で、永久にpingを実行することはおそらく望ましい動作ではないため、それがdefaultの動作。

ちなみに、終了するユーザーインターフェイスメカニズムが提供されていないことを考えると、次のようなもの以外はさらに奇妙に思えます。 ctrlc、少し洗練されていないようです。

もちろん、カウントパラメータ(-c)が使用されている場合、pingの数はオプションで制限できます。例:

$ ping -c 3 127.0.0.1

[編集]:

明確にするために、私は誰かが意見ベースの回答ではなく、実際の開発者がデフォルトの動作を決定した理由に言及するある種の参照を提供できることを望んでいます。おそらく、これを文書化する文書またはコードコメントが存在しますか?

この質問は現在、主に意見に基づいているものとして保留されていると思いますので、そうしないようにしています。

6
user5071535

ホストAとホストBの間にルートを確立したいとします。

ホストAで、ping Bを実行します。最初は、機能しません。

ホストBまたは一部のファイアウォールで、ネットワーク構成に変更を加えると、それが適用されるとすぐに、変更が機能したことがわかります。

ですから、それを行うのは非常に実用的です。それ以外の場合は、while ! ping B; do :; doneと記述する必要があります。

結局のところ、これらのタイプの質問はすべて、「その時点でのシステムリソースの制限のため」または「常識」で終わるのが一般的です。この場合、それは「常識」です。

4
WeAreLegion

さまざまな実装、さまざまな選択肢。

Iputils-ping(Linuxの場合)では、pingはデフォルトで継続的ですが、Solarisでは、その動作を取得するために-sオプションを使用する必要があります。これは、ネットワークステータスを継続的に監視するのに役立ちます。

Solarisでは、最初に返されたパケットの後に正常に終了するというpingのデフォルトの動作により、スクリプトで接続をテストするのが簡単になりますが、iputils-pingでは、ping -c1 -w15を使用して(のような)を取得する必要があります。同じ行動。

どちらもさまざまな状況で役立ちます。

さまざまな開発者、さまざまな選択肢。

1
Celada