'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;
|
}
|
}
|
});
|
};
|