ソフトウェアテスターとして、ゾンビプロセスがシステム上でどのように見えるかを知る必要がある場合があります。どのプログラムとプロセスIDがそのゾンビプロセスに関連付けられているかが明確にわかっていれば、さまざまなテストを実行できます。
ゾンビプロセスとは何ですか?
Linuxのゾンビまたは無効なプロセスは完了したプロセスですが、親プロセスと子プロセスが対応していないため、そのエントリはプロセステーブルに残ります。通常、親プロセスは、wait()関数を介して子プロセスのステータスをチェックし続けます。子プロセスが終了すると、待機機能は親にプロセスをメモリから完全に終了するように通知します。ただし、親が子のいずれかの待機関数を呼び出せなかった場合、子プロセスはシステム内でデッドプロセスまたはゾンビプロセスとして存続します。これらのゾンビプロセスは、システムに大量に蓄積され、システムのパフォーマンスに影響を与える可能性があります。
topコマンドを実行し、ゾンビが実行されている場合、出力の2行目に次のように示されます。
ただし、システムで実行されているゾンビプロセスがない場合は、この記事で説明されているように、テスト目的でダミーを作成できます。このプロセスはUbuntu18.04で実行しています。
ゾンビプロセスの作成
このセクションでは、システムでゾンビプロセスを実行するためのcプログラムを作成します。
テキストエディタを開き、次のコードを入力します:
コード
#include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main () { pid_t child_pid;child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; }
このファイルをzombie.cとして保存します
このコードで作成されたゾンビプロセスは60秒間実行されます。 sleep()関数で時間(秒単位)を指定することにより、期間を増やすことができます。
ターミナルを開き、次のコマンドを実行してこのプログラムをコンパイルします。
$ cc zombie.c -o zombie
これで、ゾンビという名前の実行可能ファイルが作成されます。
次のコマンドを使用してGNUCコンパイラがシステムにまだインストールされていない場合は、インストールする必要があることに注意してください。
$ sudo apt-get install build-essential
次に、次のコマンドでゾンビプログラムを実行します。
./zombie
次の出力が表示されます:
テスト中に親プロセスID(PPID)と子プロセスID(PID)を使用できます。たとえば、killコマンドを使用してこのゾンビプロセスを強制終了します。
このプロセスの実行中に、topコマンドを使用して別のターミナルウィンドウでシステムパフォーマンスを表示できます。出力の2行目から1つのゾンビプロセスを確認できます。
psコマンドは、この無効なプロセスとそれを担当するゾンビプログラムも表示します:
$ ps axo stat,ppid,pid,comm | grep -w defunct
このコマンドは、状態、parentID、プロセスID、ゾンビプロセスを実行しているプログラム(このチュートリアルで実行したゾンビプログラム)を提供します。
これで、単純なダミーゾンビプロセスを作成する方法を学習しました。これにより、システム上でどのように表示され、テスト目的でどのように使用できるかがわかります。