Saltar al contenido

node.js ¿cómo verificar que un proceso se está ejecutando por el nombre del proceso?

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))

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *