Solución:
Puede utilizar el paquete ps-node.
https://www.npmjs.com/package/ps-node
var ps = require('ps-node');
// A simple pid lookup
ps.lookup({
command: 'node',
psargs: 'ux'
}, function(err, resultList ) {
if (err) {
throw new Error( err );
}
resultList.forEach(function( process ){
if( process ){
console.log( 'PID: %s, COMMAND: %s, ARGUMENTS: %s', process.pid, process.command, process.arguments );
}
});
});
Creo que verás este ejemplo. Visite el sitio, tienen muchos otros usos. Darle una oportunidad.
En caso de que no esté vinculado a nodejs, desde la línea de comandos de Linux también puede hacerlo ps -ef | grep "YOUR_PROCESS_NAME_e.g._nodejs"
para comprobar si hay un proceso en ejecución.
Una pequeña mejora del código respondida por d_scalzi. Función con devolución de llamada en lugar de promesas, con solo una consulta variable y con interruptor en lugar de if / else.
const exec = require('child_process').exec;
const isRunning = (query, cb) => {
let platform = process.platform;
let cmd = '';
switch (platform) {
case 'win32' : cmd = `tasklist`; break;
case 'darwin' : cmd = `ps -ax | grep ${query}`; break;
case 'linux' : cmd = `ps -A`; break;
default: break;
}
exec(cmd, (err, stdout, stderr) => {
cb(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1);
});
}
isRunning('chrome.exe', (status) => {
console.log(status); // true|false
})
Lo siguiente debería funcionar. Se generará una lista de procesos basada en el sistema operativo y esa salida se analizará para el programa deseado. La función toma tres argumentos, cada uno es solo el nombre de proceso esperado en el sistema operativo correspondiente.
En mi experiencia, ps-node toma MUY demasiada memoria y tiempo para buscar el proceso. Esta solución es mejor si planea verificar los procesos con frecuencia.
const exec = require('child_process').exec
function isRunning(win, mac, linux){
return new Promise(function(resolve, reject){
const plat = process.platform
const cmd = plat == 'win32' ? 'tasklist' : (plat == 'darwin' ? 'ps -ax | grep ' + mac : (plat == 'linux' ? 'ps -A' : ''))
const proc = plat == 'win32' ? win : (plat == 'darwin' ? mac : (plat == 'linux' ? linux : ''))
if(cmd === '' || proc === ''){
resolve(false)
}
exec(cmd, function(err, stdout, stderr) {
resolve(stdout.toLowerCase().indexOf(proc.toLowerCase()) > -1)
})
})
}
isRunning('myprocess.exe', 'myprocess', 'myprocess').then((v) => console.log(v))