我应该将什么作为结束字符传递给 grep 等系统命令?

what should I pass as end character to system commands such as grep?

void pipe_execute(char all[][MAX_SIZE],int i,int n)
{
    if(i==n)
    {
        execute(all[i-1]);
    }
    else
    {
        int fd[2];
        char cmd1[100];
        pipe(fd);
        pid_t pid = fork();
        if(pid==0)
        {
        dup2(fd[1],fileno(stdout));
        execute(all[i-1]);
        }
        else
        {
        wait(NULL);
        dup2(fd[0],fileno(stdin));
        pipe_execute(all,i+1,n);
        }
    }
}
void execute(char cmd[])
{
    char *a = strtok(cmd," ");
    char *b = strtok(NULL," ");
    pid_t pid = fork();

    if(pid==0)
    execlp(a,a,b,(char*)NULL);
    else
    {
    wait(NULL);
    }   
}

在这个程序中假设
全部[0] = "ls"
全部[1] = "grep aa"
我=1
n=2

"grep a" 后 grep 的执行没有停止,可能是在等待一些特殊字符,我已经尝试过所有像 '\0'、'\n'、EOF 等但它没有用。我应该发送什么来结束 grep?

它没有停止,因为它正在等待输入。关闭它的 stdin 让它退出。如果它附加到 tty,发送 Ctrl-D 给它。另一种选择是用适当的信号杀死它,但我认为你不需要那样。