我试图在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,我该怎么做呢?谢谢你的帮助!