title: grep doesn't work in custom shell
body: <p>I'm trying to write a shell in c and it mostly works except for grep. Whenever I give a grep command in the shell, it just doesn't output anything. Here is the part of the code I use to create a new child process and then run execvp() in it.</p>
  
  <p>The file descriptors(fd_in and fd_out) in dup2 are passed as arguments to the function which has this code. And most interestingly, when I give 'grep' or 'grep --help' it displays as usual. Am I missing anything? Or something special has to be done with grep?</p>
  
  <p>This is what happens with my shell: The last command outputs when run from bash.</p>
  
  <pre><code>--&gt; grep
  Usage: grep [OPTION]... PATTERN [FILE]...
  Try `grep --help' for more information.
  --&gt; wc /etc/hosts
   11  33 314 /etc/hosts
  --&gt; grep -i "perror" shell.c
  --&gt; 
  </code></pre>
  
  <p>Here is the code :</p>
  
  <pre><code>void 
  create_process(char *cmd_argv[], int fd_in, int fd_out, char *buffer_copy) {
  
      /*Flag bit for Background processes*/
      int FLAG = 0;
  
      pid_t cpid;
      int status;
      int i = 0,j = 0;
  
      /*Find the no. of arguments*/
      while(cmd_argv[j] != NULL)
          j++;
  
      /*Set the flag bit*/
      if(strcmp("&amp;", cmd_argv[j-1]) == 0) {
          FLAG = 1;
          cmd_argv[j-1] = NULL;
      }
  
      //Create a child process
      cpid = fork();
  
      if (cpid == -1) {
          perror("fork");
          exit(EXIT_FAILURE);
      }
  
      //In the child...
      if (cpid == 0) {
  
      /*Checking if the file descriptors are already assigned*/
  
          /*For stdin*/
          if (fd_in != STDIN_FILENO) {
              dup2(fd_in, STDIN_FILENO);
              close(fd_in);
          }
  
          /*For stdout*/
          if (fd_out != STDOUT_FILENO) {
              dup2(fd_out, STDOUT_FILENO);
              close(fd_out);
          }
  
          /*Run the cmd specified*/
          status = execvp(cmd_argv[0], cmd_argv);
  
          /*In case of errors*/
          if(status &lt; 0) {
              perror("execvp ");
              exit(1);
          }
      }
  
      //In the parent...
      else {
  
          if(FLAG == 1) {
              /*Find where the new bg process can be inserted*/
              while(1) {
                  if (bgprocess[i].pid == 0) {
                      bgprocess[i].pid = cpid;
                      strcpy(bgprocess[i].cmd, buffer_copy);
                      break;
                  }
                  i++;
              }
              printf("[%d] : %s\n", cpid, cmd_argv[0] );
          }
  
          /*If not bg, wait for the process to exit*/
          else 
              waitpid(cpid, NULL, 0);
      }
  }
  </code></pre>