public static String getProcessId(Path path) throws IOException {
    if (path == null) {
      throw new IOException("Trying to access process id from a null path");
    }
    LOG.debug("Accessing pid from pid file {}", path);
    String processId = null;
    BufferedReader bufReader = null;

    try {
      File file = new File(path.toString());
      if (file.exists()) {
        FileInputStream fis = new FileInputStream(file);
        bufReader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));

        while (true) {
          String line = bufReader.readLine();
          if (line == null) {
            break;
          }
          String temp = line.trim(); 
          if (!temp.isEmpty()) {
            if (Shell.WINDOWS) {
              // On Windows, pid is expected to be a container ID, so find first
              // line that parses successfully as a container ID.
              try {
                ContainerId.fromString(temp);
                processId = temp;
                break;
              } catch (Exception e) {
                // do nothing
              }
            }
            else {
              // Otherwise, find first line containing a numeric pid.
              try {
                long pid = Long.parseLong(temp);
                if (pid > 0) {
                  processId = temp;
                  break;
                }
              } catch (Exception e) {
                // do nothing
              }
            }
          }
        }
      }
    } finally {
      if (bufReader != null) {
        bufReader.close();
      }
    }
    LOG.debug("Got pid {} from path {}",
        (processId != null ? processId : "null"), path);
    return processId;
  }
@Test (timeout = 30000)
  public void testComplexGet() throws IOException {
    String rootDir = new File(System.getProperty(
        "test.build.data", "/tmp")).getAbsolutePath();
    File testFile = null;
    String processIdInFile = Shell.WINDOWS ?
      " container_1353742680940_0002_01_000001 " :
      " 23 ";
    String expectedProcessId = processIdInFile.trim();
    try {
      testFile = new File(rootDir, "temp.txt");
      PrintWriter fileWriter = new PrintWriter(testFile);
      fileWriter.println("   ");
      fileWriter.println("");
      fileWriter.println("abc");
      fileWriter.println("-123");
      fileWriter.println("-123 ");
      fileWriter.println(processIdInFile);
      fileWriter.println("6236");
      fileWriter.close();      
      String processId = null; 
                  
      processId = ProcessIdFileReader.getProcessId(
          new Path(rootDir + Path.SEPARATOR + "temp.txt"));
      Assert.assertEquals(expectedProcessId, processId);
      
    } finally {
      if (testFile != null
          && testFile.exists()) {
        testFile.delete();
      }
    }
  }