text: 'use strict';
  
  const runScript = require('runscript');
  const isWin = process.platform === 'win32';
  const REGEX = isWin ? /^(.*)\s+(\d+)\s*$/ : /^\s*(\d+)\s+(.*)/;
  
  exports.findNodeProcess = function* (filterFn) {
    const command = isWin ?
      'wmic Path win32_process Where "Name = \'node.exe\'" Get CommandLine,ProcessId' :
      // command, cmd are alias of args, not POSIX standard, so we use args
      'ps -eo "pid,args"';
    const stdio = yield runScript(command, { stdio: 'pipe' });
    const processList = stdio.stdout.toString().split('\n')
      .reduce((arr, line) => {
        if (!!line && !line.includes('/bin/sh') && line.includes('node')) {
          const m = line.match(REGEX);
          /* istanbul ignore else */
          if (m) {
            const item = isWin ? { pid: m[2], cmd: m[1] } : { pid: m[1], cmd: m[2] };
            if (!filterFn || filterFn(item)) {
              arr.push(item);
            }
          }
        }
        return arr;
      }, []);
    return processList;
  };
  
  exports.kill = function(pids, signal) {
    pids.forEach(pid => {
      try {
        process.kill(pid, signal);
      } catch (err) { /* istanbul ignore next */
        if (err.code !== 'ESRCH') {
          throw err;
        }
      }
    });
  };
  