ゾンビプロセス

 ゾンビプロセスとは
 子プロセスの終了時に、親プロセスがwait()を実行しないと、子プロセスはゾンビプロセスになる。

ubuntuではpsコマンドで、と表示されます。
プロセスを利用したプログラムでは、親プロセスと子プロセスの終了のタイミングによって、子プロセスがゾンビになる可能性があります。

親プロセスが子プロセスの終了をwait()関数で見届けないと、子プロセスはゾンビプロセスになる。
Linuxでは、プロセスを生成する方法はfork()しかない。
親プロセスが先に終了してしまって、子プロセスは亡くなった親からの応答を待ち続けている。

子プロセスがゾンビのまま、親プロセスが終了したらどうなるのか?

こういったプロセス処理関連はよくわからない。ちゃんと勉強しないと!
結局自分の手でコード書いて、納得するしかないんだよなぁ。

親プロセスにwait()のないコード
親プロセスのwait()に時間がかかるコード

ゾンビを作るコード

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>


int main(){
        int  pid = fork();

        if(pid == -1){
                printf("fork failed.\n");
        }else if(pid == 0){
                printf("child process. PID is %d\n",getpid());
        }else{
                sleep(10);
                printf("parent process. PID is %d\n",getpid());
        }

        return 0;
}

sleep中にpsコマンドを実行すると、ゾンビが発生している。
に注目!

root@pide-VirtualBox:/home/pide/test# ps x |grep a.out
 2608 pts/2    S+     0:00 ./a.out
 2609 pts/2    Z+     0:00 [a.out] <defunct>
 2611 pts/3    S+     0:00 grep --color=auto a.out

いかにしてゾンビを殺すか

ゾンビを殺すコード

プロセスの一生

fork()→exec()→exit()