なぜ私たちはゾンビを殺すことができないのですか? [コピー]

なぜ私たちはゾンビを殺すことができないのですか? [コピー]

この質問は、ゾンビプロセスを終了する方法に関する他の質問と重複してマークされ、編集中です。

ゾンビプロセスを終了する方法に対する答えを探しているわけではありません。私のシステムにはゾンビはありませんが、ゾンビがどのように生成されるかを知っています。

質問を変えてみましょう。現在のゾンビを削除するために許可される方法は次のとおりです。

  • SIGCHLD を親項目として送信します。これは理論的には動作しますが、実際には常に動作するわけではありません。最初にゾンビが生成された理由の1つは、親プロセスがSIGCHLDに正しく応答しなかったことです。

  • 親プロセスを終了します。

  • ゾンビ生成プロセスのバグを修正しました。
  • 再起動。
  • または述べたようにここ

  • あるいは、このため、@richardは私の質問に対する編集の以前のコメントでこれを言及しました。

    ..to prevent the pid being reused. The parent has the pid of the child and may signal the child (may try to kill it), just from the pid it recieved when it created the child. It would be bad for the pid to be reused. Therefore the child remains in a zombie state until the parent acknowledges the death of the child, or the parent dies.

今私の質問は次のとおりです。

  • 1つ以上のゾンビを削除する直接的な方法がないのはなぜですか?

  • 信号でゾンビを殺すことができる場合、副作用/結果は何ですか?

  • * NIX管理者がゾンビをクリーンアップするシグナルやコマンドを生成するのを防ぐ要素(「新しいシグナル生成」という文が技術的に許可されていない場合は申し訳ありません)。

ベストアンサー1

その時点でプロセスは終了しました。もう殺すことは意味がありません。親 ti がその状態を取得できるように、プロセステーブルに記録され続けます。

すべてのプロセスが終了するとゾンビになります。ほとんどの親プロセスは子プロセスを非常にすばやく整理するため、これを見ることはできません。ソフトウェアがボットを治療せずにボットを介してのみ治療できる場合は、バグレポートを送信する必要があります。内部に親プロセスが終了したら。

追加の質問は、SIGKILLプロセステーブルから削除されない理由です。まず、なぜこの仕事をするのか教えてください。ユーザーがプロセステーブルに存在しないプロセスを削除する理由がわかりません。オペレーティングシステムの設計では、常に何かしなければならない良い理由尋ねる前になぜこんなことないの?。リクエストされた機能の実際のユースケースはありません。

目的が不足しているだけでなく、望ましくない結果が生じる可能性があります。保護者は、お子様の退職状況について電話wait()および/または確認してください。waitpid()プロセスが完了する前に呼び出されるかどうかに関係なくもう存在しないSIGKILL送る前か後。

カーネルが履歴を保持しない場合(つまり、プロセスがプロセステーブルから削除された場合)、動作は一貫していないはずであり、親は矛盾を予想し、正当化なしに処理する必要があります。古いシステムを再利用する場合PID記録を維持しないと、ソフトウェアが誤って完全に異なるプロセスを終了するなど、より深刻な問題が発生する可能性があります。

また見なさい:http://en.wikipedia.org/wiki/Zombie_process

おすすめ記事