最近在写服务器端代码的时候,出现了大量的defunct 进程,
但是不知道为什么会发生这样的情况。
经过一段时间的观察,发现是由函数popen造成的,
popen会调用fork()创建子进程,而如果没有用pclose()结束此子进程,
则会出现大量的僵尸进程。
FILE *stream;
char buf[1024]={0};
char cmdstr[SHELL_STRING_MAX_LEN]={0};
sprintf(cmdstr,"ls -l %s",fname) ;
stream = popen(cmdstr,"r" );
fgets( buf, FILE_NAME_MAX_LEN, stream);
pclose( stream );