ゾンビプロセス
ゾンビプロセスとは
子プロセスの終了時に、親プロセスが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()