Linuxゾンビプロセス

  

プロセスがexitを呼び出した後、そのプロセスはすぐには消えず、ゾンビと呼ばれるデータ構造を残すことに気づいている人もいます。 Linuxプロセスの5つの状態では、ゾンビプロセスは非常に特殊な種類であり、ほとんどすべてのメモリスペースを捨て、実行可能コードを持たず、スケジュールを組むことができず、プロセスリストの位置を維持してプロセスを記録します。終了ステータスなどの情報は他のプロセスによって収集され、ゾンビプロセスはメモリスペースを占有しなくなりました。

ゾンビプロセスの理由は、Unixに戻ってみると、Unixデザイナーは、クールなものとは関係がないので、このことを設計していません。前述のように、ゾンビプロセスはプログラマーやシステム管理者にとって非常に重要な多くの情報を保持しています。それは正常な終了ですか、それともエラーがありますか、それとも他のプロセスによって強制的に撤回されますか?言い換えれば、このプログラムの終了コードは何ですか?第二に、このプロセスによって占有される合計システムCPU時間と合計ユーザーCPU時間は何ですか?ページ不在の数と受信信号の数。この情報はゾンビプロセスに保存されますゾンビプロセスが存在しない場合、プロセスが実行される期間を想像してみてください。システム管理者がそれを使う必要があるので、私は点滅しなければなりません。


つまり、プロセスが終了した後、システムはプロセスの状態をZombieに変更し、親プロセスが終了情報を収集するのを待つ時間を与えます。他のものでビジー状態を収集することはできないので、ゾンビ状態を使用することは、プロセスが終了し、親プロセスが情報を収集するのを待っていることを示します。

Zombieプロセスはkillコマンドではクリアできません。プロセスを終了する必要がある場合は、その親プロセスをクリアするか、カーネルによってクリアされるまで長時間待つ必要があります。 ZombieのプロセスもプロセスID番号を占有しているため、そのようなプロセスが多数ある場合は、システムのプロセススケジューリングには役立ちません。

ここで、例を見てみましょう。
/* zombie.c * /#include< sys /types.h> #include< unistd.h> main(){pid_t pid; pid = fork(); if(pid< 0){/*エラーが* /printf("エラーが発生した!\\ n");}その他の場合(pid == 0){/*子プロセスの場合* /終了(0);} else {/*親プロセスの場合* /sleep(60); /*スリープ60秒* /wait(NULL); /* collectゾンビプロセス* /}}

このプログラムをコンパイルします。 Br> $ cc zombie.c -oゾンビ

次のコマンドを実行できるように、バックグラウンドでプログラムを実行します。
$ ./zombie& [1] 1217

システム内のプロセスの一覧を表示します。
$ ps -ax ... ... 1137 pts /0 S 0:00 -bash1217 pts /0 S 0:00 ./zombie1218 pts /0 Z 0:00 [ゾンビ] 1578 pts /0 R 0:00 ps - Ax

ここで、 "Zor"はゾンビプロセスの特徴であり、これはプロセス1218が現在ゾンビプロセスであることを意味する。

ゾンビプロセスに関する情報を収集してこれらのゾンビプロセスを終了するには、waitpid呼び出しと待機呼び出しを親プロセスで使用する必要があります。両方の役割は、プロセスを完全に消滅させながら、ゾンビプロセスによって残された情報を収集することです。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved