UNPKG

ps-find

Version:
66 lines (50 loc) 1.22 kB
'use strict' var spawn = require('child_process').spawn; // ps aux output mapping var MAPPING = { pid: 0, name: 1 }; var find = function (input, callback) { var pgrep = spawn('pgrep', ['-afl', input]); pgrep.stdout.on('data', function (data) { var result = parse(data); post(callback, null, result); }); pgrep.stderr.on('data', function (data) { post(callback, data); }); pgrep.on('close', function (code) { if (code !== 0) { // Nothing found post(callback, new Error('No process found.')); } }); }; var post = function (callback, error, result) { result = result || []; if (typeof callback === 'function') { callback(error, result); } }; var parse = function (input) { var result = [], data = input.toString().split('\n'), proc = null; for (var i = 0, length = data.length; i < length; i++) { if (data[i].length > 0) { data[i] = data[i].replace(/ +/g, ' '); proc = parseRow(data[i]); result.push(proc); } } return result; }; var parseRow = function (input) { var data = input.split(' '); return { pid: parseInt(data[MAPPING.pid]), name: data[MAPPING.name] }; }; module.exports.find = find;