在C中实现管道,何时等待杀死子进程?

时间:2017-10-20 18:41:33

标签: c unix fork

我试图在C中实现一个同时执行多个命令的管道(例如:ls -l | grep key | less)。以下是我正在使用的代码的简单版本:

int main(int argc, char *argv[])
{
   int i;
   pid_t pid;

   for(i = 1; i < argc-1; i++)
   {
       int pd[2];
       pipe(pd);

       if ((pid = fork()) == 0) 
       {
           /* child */
           dup2(pd[1], 1);
           execlp(argv[i], argv[i], NULL);
       }

       dup2(pd[0], 0);
       close(pd[1]);
   }

   execlp(argv[i], argv[i], NULL);
}

它有效,但它有时会留下僵尸进程。我知道我需要等待(和状态),但我不确定如何识别我的读取是否为该过程的EOF并且我可以杀死它。我的代码在什么时候检查EOF,我该怎么做呢?谢谢你的帮助!

0 个答案:

没有答案