この無限のループがシステムリソースを使い果たしないのはなぜですか?

シャーカント

私はBASHで次のことをしました:

while true;do bash;done

私はこのワンライナーを書きましたが、最初はそれが次のことかどうかわかりませんでした。

  • メインシェルにとどまり、メモリやその他のものが枯渇するのと同じ数のサブシェルを生成します。
  • メインシェルはサブシェルを生成しますが、このサブシェルは、この系統がメモリやその他のものを使い果たすまでサブシェルを生成します。

しかし、それは2番目のケースだと思います。ワンライナーを実行すると、プロンプトが戻ってすぐに戻り、exitと別のexitを入力し始め、exit、exit、exit ...そしてまだ戻ってこなかったからです。メインシェル。

さて、非常に多くのサブシェルが開かれ、それぞれがプログラムであるため、それぞれに独自のPIDが必要だと思いました。

だから私はしました:

ps aux | grep bash

名前にbashが含まれる多くのプロセスが見られることを期待しています。

ただし、このようなものはなく、bashシェルは2つしかありませんでした。

どうしてそれが可能か、私はどこかでプロセス、シェル、サブシェル、PIDについて非常に間違った考えを持っていると思いますが、どこにあるのかわかりません。

クサラナンダ

ループは、各反復で1つの対話型シェルセッションを開始します。

インタラクティブセッションでは、プロンプトが表示されます(インタラクティブであるため)。それを終了すると、制御がループに戻り、別の対話型シェルが開始されます。

これがbash、一度に大量のプロセスを取得しない理由です。ループを実行する親と、新しいプロンプトを表示する子の2つだけです。


ループを書くこともできます

while true; do bash; done

trueユーティリティは、引数を取らない、それだけでシェルが「真」と解釈されるゼロの終了値が返されます。


bashプロセスの爆発的増加(いわゆる「フォーク爆弾」)が必要だった場合は、次のように書いている可能性があります。

while true; do { bash & }; done

これbashにより、ループの各反復で対話型セッションが開始さますが、バックグラウンドプロセスとして開始されますセッションはバックグラウンドプロセスとして開始されるため、ループは最新のbashプロセスが終了するのを待たずに次のプロセスを開始します。

これから回復するには、システムを再起動する必要がある場合があります。

このフォーク爆弾は、反復ごとに1つの新しいプロセスしか開始しないため、実際よりも害がありません他の人は、指数関数的にプロセスを開始する可能性があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このスクリプトが無限ループで終了しないのはなぜですか?

分類Dev

このソリューションが無限ループに陥らないのはなぜですか?

分類Dev

ピーターソンのアルゴリズムのこの単純化がプロセスの同期を提供しないのはなぜですか?

分類Dev

Pythonの印刷ステートメントが無限ループの上にないのはなぜですか?

分類Dev

このカスタムソーシング関数が宣言された変数をグローバルに利用可能にしないのはなぜですか?

分類Dev

引数を指定してシフトすると、このbashスクリプトで無限ループが発生するのはなぜですか?

分類Dev

フローリングの無限大がエラーをスローしないのはなぜですか?

分類Dev

これがwhileステートメントで無限ループを作成するのはなぜですか?

分類Dev

「効果的な補足GIDの設定」システムコールがないのはなぜですか?

分類Dev

このコードが無限ループを引き起こさないのはなぜですか?

分類Dev

このスクリプトリソースがChocolateyパッケージをインストールしないのはなぜですか?

分類Dev

開いているファイルが多すぎてストリームを開くことができませんでした-php1024の最大制限-Redhat-新しい制限が機能しないのはなぜですか?

分類Dev

Androidアプリがインストール時に権限を要求しないのはなぜですか?

分類Dev

このjqueryスクリプトがHTML要素をループしないのはなぜですか?

分類Dev

無限ループが整数をインクリメントしないのはなぜですか?

分類Dev

プログラムが無限ループを実行しているのはなぜですか?Python

分類Dev

開発中に無制限のFirebaseリソースがないのはなぜですか?

分類Dev

インストールしたことがないのに、システムに git があるのはなぜですか?

分類Dev

この場合、useEffectが無限ループにヒットしないのはなぜですか?

分類Dev

ajaxヘルパーを使用しているときに、これがアクションの無限ループを作成するのはなぜですか?

分類Dev

なぜこのforステートメントが無限ループを作成するのですか?

分類Dev

このマージソート関数が無限ループを引き起こさないのはなぜですか?

分類Dev

このvbスクリプトが電子メールを送信しないのはなぜですか?

分類Dev

このアルゴリズムが最後のインデックスを正しくソートしないのはなぜですか?

分類Dev

ループが「CM」で始まらないすべてのアイテムをリストから削除しないのはなぜですか?

分類Dev

システムが無効なバージョンのアセンブリから型を読み込もうとしているのはなぜですか?

分類Dev

Linuxユーティリティがシステムコールを使用して現在の時刻を取得しないのはなぜですか?

分類Dev

なぜ無限ループを引き起こしているのですか?

分類Dev

現在の18.04.3システムが新しい18.04.3システムと同じカーネルを実行していないのはなぜですか?

Related 関連記事

  1. 1

    このスクリプトが無限ループで終了しないのはなぜですか?

  2. 2

    このソリューションが無限ループに陥らないのはなぜですか?

  3. 3

    ピーターソンのアルゴリズムのこの単純化がプロセスの同期を提供しないのはなぜですか?

  4. 4

    Pythonの印刷ステートメントが無限ループの上にないのはなぜですか?

  5. 5

    このカスタムソーシング関数が宣言された変数をグローバルに利用可能にしないのはなぜですか?

  6. 6

    引数を指定してシフトすると、このbashスクリプトで無限ループが発生するのはなぜですか?

  7. 7

    フローリングの無限大がエラーをスローしないのはなぜですか?

  8. 8

    これがwhileステートメントで無限ループを作成するのはなぜですか?

  9. 9

    「効果的な補足GIDの設定」システムコールがないのはなぜですか?

  10. 10

    このコードが無限ループを引き起こさないのはなぜですか?

  11. 11

    このスクリプトリソースがChocolateyパッケージをインストールしないのはなぜですか?

  12. 12

    開いているファイルが多すぎてストリームを開くことができませんでした-php1024の最大制限-Redhat-新しい制限が機能しないのはなぜですか?

  13. 13

    Androidアプリがインストール時に権限を要求しないのはなぜですか?

  14. 14

    このjqueryスクリプトがHTML要素をループしないのはなぜですか?

  15. 15

    無限ループが整数をインクリメントしないのはなぜですか?

  16. 16

    プログラムが無限ループを実行しているのはなぜですか?Python

  17. 17

    開発中に無制限のFirebaseリソースがないのはなぜですか?

  18. 18

    インストールしたことがないのに、システムに git があるのはなぜですか?

  19. 19

    この場合、useEffectが無限ループにヒットしないのはなぜですか?

  20. 20

    ajaxヘルパーを使用しているときに、これがアクションの無限ループを作成するのはなぜですか?

  21. 21

    なぜこのforステートメントが無限ループを作成するのですか?

  22. 22

    このマージソート関数が無限ループを引き起こさないのはなぜですか?

  23. 23

    このvbスクリプトが電子メールを送信しないのはなぜですか?

  24. 24

    このアルゴリズムが最後のインデックスを正しくソートしないのはなぜですか?

  25. 25

    ループが「CM」で始まらないすべてのアイテムをリストから削除しないのはなぜですか?

  26. 26

    システムが無効なバージョンのアセンブリから型を読み込もうとしているのはなぜですか?

  27. 27

    Linuxユーティリティがシステムコールを使用して現在の時刻を取得しないのはなぜですか?

  28. 28

    なぜ無限ループを引き起こしているのですか?

  29. 29

    現在の18.04.3システムが新しい18.04.3システムと同じカーネルを実行していないのはなぜですか?

ホットタグ

アーカイブ