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 testNullPath() {
    String pid = null;
    try {
      pid = ProcessIdFileReader.getProcessId(null);
      fail("Expected an error to be thrown for null path");
    } catch (Exception e) {
      // expected
    }
    assert(pid == null);
  }