Saltar al contenido

Generar y matar un proceso en node.js

Solución:

Consulte esta discusión

Una vez que comience a escuchar datos en stdin, el nodo esperará la entrada en stdin hasta que se le indique que no lo haga. Cuando el usuario presiona ctrl-d (es decir, el final de la entrada) o el programa llama a stdin.pause (), el nodo deja de esperar a stdin.

Un programa de nodo no se cierra a menos que no tenga nada que hacer o esperar. Lo que está sucediendo es que está esperando en stdin y, por lo tanto, nunca sale.

Intente cambiar su devolución de llamada setTimeout a

console.log('kill');
child.stdin.pause();
child.kill();

Espero que funcione.

Hay un paquete npm realmente genial llamado tree-kill que hace esto de manera muy fácil y efectiva. Mata el proceso del niño, y todos los procesos secundarios que ese niño puede haber comenzado.

var kill  = require('tree-kill');
const spawn = require('child_process').spawn;

var scriptArgs = ['myScript.sh', 'arg1', 'arg2', 'youGetThePoint'];
var child = spawn('sh', scriptArgs);

// some code to identify when you want to kill the process. Could be
// a button on the client-side??
button.on('someEvent', function(){
    // where the killing happens
    kill(child.pid);
});

Tuve exactamente el mismo problema que tú con omxplayer y la solución en esta publicación de blog funcionó para mí.

var psTree = require('ps-tree');

var kill = function (pid, signal, callback) {
    signal   = signal || 'SIGKILL';
    callback = callback || function () {};
    var killTree = true;
    if(killTree) {
        psTree(pid, function (err, children) {
            [pid].concat(
                children.map(function (p) {
                    return p.PID;
                })
            ).forEach(function (tpid) {
                try { process.kill(tpid, signal) }
                catch (ex) { }
            });
            callback();
        });
    } else {
        try { process.kill(pid, signal) }
        catch (ex) { }
        callback();
    }
};

// elsewhere in code
kill(child.pid);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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