title: Fail to read command output using popen function
body: <p>In Linux, I am finding pid of process by opening pipe with "pidof process_name" command and then reading it's output using fgets function. But it fails to find pid once in a while. Below is my code for finding pid of my process.</p>
  
  <pre><code>int FindPidByProcessName(char *pName)
  {
      int pid = -1;
      char line[30] = { 0 };
      char buf[64] = { 0 };
  
      sprintf(buf, "pidof %s", pName);
  
      //pipe stream to process
      FILE *cmd = popen(buf, "r");
  
      if (NULL != cmd)
      {
          //get line from pipe stream
          fgets(line, 30, cmd);
          //close pipe
          pclose(cmd); cmd = NULL;
  
          //convert string to unsigned LONG integer
          pid = strtoul(line, NULL, 10);
      }
  
      return pid;
  }
  </code></pre>
  
  <p>In output sometimes pid=0 comes even though process is available in "ps" command output.
  So, I try to find root cause behind this issue and i found something like input/output buffer mechanism is may creating issue in my scenario.</p>
  
  <p>So I try to use sync() function before opening popen() and strangely my function starts working with 100% accuracy.</p>
  
  <p>Now sync() function is taking too much time(approximately 2min sometime) to complete its execution which is not desirable. So i try to use fflush(), fsync() and fdatasync() but these all are not working appropriately.</p>
  
  <p>So please anyone tell me what was the exact root cause behind this issue And how to solve this issue appropriately?</p>