Linuxゾンビプロセスとその解決策
1.原因:
UNIXシステムでは、プロセスは終了しましたが、彼のプロセスは終了しました。親プロセスは彼を待たず(call wait /waitpid)、そして彼はゾンビプロセスになります。 psコマンドを使用して、機能していないフラグを表示します。ゾンビプロセスはすでに死んだプロセスですが、それでもプロセステーブルのスロットを占めています。
しかし、プロセスの親プロセスが最初に終了した場合、そのプロセスはゾンビプロセスにはなりません。各プロセスは終了するので、システムは現在のシステムで実行されているすべてのプロセスをスキャンして、終了したばかりのプロセスの子プロセスがあるかどうかを確認します。親プロセス、つまり各プロセスが親プロセスを持つようにします。 Initプロセスは自動的にその子プロセスを待ちますので、Initによって引き継がれるすべてのプロセスはゾンビプロセスになりません。
2.原則分析:
各Unixプロセスはプロセステーブルにエントリを持ち、コアプロセスがプロセスを実行するために使用するすべての情報はエントリポイントに格納されます。 。 psコマンドを使用してシステム内のプロセス情報を表示すると、プロセステーブルに関連データが表示されます。 fork()システムコールで新しいプロセスが作成されると、コアプロセスはプロセステーブル内の新しいプロセスにエントリポイントを割り当て、そのエントリポイントに対応するプロセステーブル内に関連情報を格納します。これらのメッセージの1つは、その親プロセスのIDです。
子プロセスの終了と親プロセスの実行は非同期プロセスです。つまり、親プロセスは子プロセスの終了時刻を予測できません。それで、それは、親プロセスが子プロセスを待つにはあまりにもビジーであるか、または子プロセスがいつ終了するかを知らず、子プロセスの終わりに状態情報を失うためです。いいえUNIXには、親プロセスが子プロセスの最後に状態情報を知りたいということを保証するためのメカニズムが用意されているので、入手することができます。このメカニズムは、次のとおりです。子プロセスが自身のライフサイクルを終了すると、exit()システムコールを実行し、カーネルは開いているファイルや占有メモリなど、プロセスのすべてのリソースを解放します。ただし、特定の情報(プロセスID、終了コード、プロセスの終了ステータス、プロセスのCPU時間など)は保持され、データはシステムまで保持されます。親プロセスがwait /waitpidによってフェッチされるまで、それをその親プロセスに渡します。
3.解決策:
(1)親プロセスは、waitやwaitpidなどの関数で子プロセスが終了するのを待っているため、親プロセスがハングします。
wait()またはwaitpid()システムコールを実行すると、子プロセスは終了後すぐにプロセステーブル内のデータを親プロセスに返し、システムはただちにエントリポイントを削除します。この場合、無効プロセスは生成されません。
(2)親プロセスが非常にビジーな場合は、signal関数を使ってSIGCHLD用のハンドラをインストールできます。子プロセスが終了した後、親プロセスはシグナルを受信し、ハンドラ内で待機リサイクルを呼び出します。
(3)子プロセスの終了時に親プロセスが気にしない場合は、signal(SIGCLD、SIG_IGN)またはsignal(SIGCHLD、SIG_IGN)を使用して、子プロセスの終了に関心がないことをカーネルに通知できます。プロセスが終了すると、カーネルはリサイクルして親プロセスにシグナルを二度送信することはなくなります。親プロセスは子プロセスを分岐し、それから作業を続け、子プロセスは孫プロセスを分岐して終了します。 Sunのプロセスはinitによって引き継がれ、グランドプロセスが終了した後、initはリサイクルされます。ただし、子プロセスのリサイクルは単独で行わなければなりません。
debianのインストールは最小インストールを使用するため、デフォルトは中国語でインストールされますが、カーネルは中国語フォントを持ちません。解決策:ロケールをリセットし、ROOTユーザーでログインし
最近、Linux管理者が作者に助けを求めました。彼は、彼らがLinuxオペレーティングシステムにOracle 10Gデータベースシステムを展開したと言いました。現在、彼らはデータベースシステムのデータ
をLinuxにインストールする方法必要なjdkをLinuxにインストールする方法?前回、Linuxに付属のjdkをアンインストールする方法について説明しました。どうすればいいですか。 Xiaobian
このプログラムと出力を使用して、waitpidの使用法と特性を分析します。 waitpidをWNOHANGノンブロッキング親プロセス状態に設定し、最初にwaitpidが呼び出されたとき:この時点では子
グラフィックカードのドライバをアップグレードする方法は、詳細を言った、私はコンピュータを理解していない
Win10のコンパクトモードを開く方法Windows10のコンパクトモードの詳細
Microsoft Windows XPシステムのようにVistaを使用する[グループマップ]
システムのインストール後に起動速度が非常に遅い場合はどうすればいいですか?
Win10管理ツールはどこにありますか? Win10管理ツールを開く2つの方法
Win7システムディスクをクリーンアップし、ユーザーフォルダを
XPシステムでは、WebページのコンテンツをコピーしているIEブラウザが常にクリップボードへのアクセスを許可しているように見えます。