Ubuntu 18.04LTSでダミーゾンビプロセスを作成する方法

ソフトウェアテスターとして、ゾンビプロセスがシステム上でどのように見えるかを知る必要がある場合があります。 どのプログラムとプロセスIDがそのゾンビプロセスに関連付けられているかが明確にわかっている場合は、さまざまなテストを実行できます。

ゾンビプロセスとは何ですか?

Linuxのゾンビまたは無効なプロセスは完了したプロセスですが、親プロセスと子プロセスが対応していないため、そのエントリはプロセステーブルに残ります。 通常、親プロセスは、wait()関数を介して子プロセスのステータスをチェックし続けます。 子プロセスが終了すると、待機機能は親にプロセスをメモリから完全に終了するように通知します。 ただし、親が子のいずれかの待機関数を呼び出せなかった場合、子プロセスはシステム内でデッドプロセスまたはゾンビプロセスとして存続します。 これらのゾンビプロセスは、システムに大量に蓄積され、そのパフォーマンスに影響を与える可能性があります。

topコマンドを実行し、ゾンビが実行されている場合、出力の2行目に次のように示されます。

ただし、システムで実行されているゾンビプロセスがない場合は、この記事で説明されているように、テスト目的でダミーを作成できます。 このプロセスはUbuntu18.04で実行しています。

ゾンビプロセスの作成

このセクションでは、システムでゾンビプロセスを実行するためのacプログラムを作成します。

テキストエディタを開き、次のコードを入力します。

コード

#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;
}

Save このファイルをzombie.cとして

このコードで作成されたゾンビプロセスは60秒間実行されます。 sleep()関数でtime(秒単位)を指定することにより、期間を長くすることができます。

ターミナルを開き、次のコマンドを実行してこのプログラムをコンパイルします。

$ cc zombie.c -o zombie

これで、ゾンビという名前の実行可能ファイルが作成されます。

次のコマンドを使用してGNUCコンパイラがシステムにまだインストールされていない場合は、インストールする必要があることに注意してください。

$ sudo apt-get install build-essential

次に、次のコマンドでゾンビプログラムを実行します。

./zombie

次の出力が表示されます。

テスト中に親プロセスID(PPID)と子プロセスID(PID)を使用できます。 にとって example killコマンドを使用してこのゾンビプロセスを強制終了します。

このプロセスの実行中に、topコマンドを使用して別のターミナルウィンドウでシステムパフォーマンスを表示できます。 出力の2行目から1つのゾンビプロセスを確認できます。

psコマンドは、この無効なプロセスとそれを担当するゾンビプログラムも表示します。

$ ps axo stat,ppid,pid,comm | grep -w defunct

このコマンドは、状態、parentID、プロセスID、ゾンビプロセスを実行しているプログラム(このチュートリアルで実行したゾンビプログラム)を提供します。

これで、単純なダミーゾンビプロセスを作成する方法を学習しました。 これにより、システム上でどのように表示され、テスト目的でどのように使用できるかがわかります。