如何杀死子进程并允许父进程继续

时间:2019-06-04 18:21:47

标签: javascript node.js child-process

我正在使用node.js监视网站API的命令,并根据所述命令选择适当的子进程。一次只能运行一个子进程。到目前为止,子进程1从启动node.js脚本开始(良好)。然后,当听到命令时,子进程2启动(也很好),但子进程1仍在后台运行(不好)。

如何使子进程1在子进程2开始时终止?我目前正在使用("child_process").exec;,并且我的代码大部分都可以使用,应该改为使用("child_process").fork;还是("child_process").spawn;

我尝试在子进程2的启动上使用execFile.kill('SIGTERM');,以及在没有运气的情况下使用else / if语句。 (我将减少下面的非必需代码)。

const tmi = require('tmi.js');
var exec = require("child_process").exec;
var execFile = require('child_process').exec;

.
.
.

(edited out)

.
.
.

// Register our event handlers (defined below)
client.on('connected', (address, port) => {
    client.action('account', 'phrase');

        execFile('/path/script.py, function(error, stdout, stderr) {
        if (error) {
            throw error;
            return;
        }
    });

});

client.on('chat', (channel, user, message, self) => { 
    if (message === '!exec') {

    execFile.kill('SIGTERM'); //to try and terminate child process 1 above

        exec('/path/script.py , function(error, stdout, stderr) {
            if (error) {
                console.error(`exec error: ${error}`);
                return;
            }
            console.log(`stdout: ${stdout}`);
            console.log(`stderr: ${stderr}`);
        });

    }
});

我在这个问题上工作了一段时间,没有太大进展。任何见解都将受到赞赏!

1 个答案:

答案 0 :(得分:0)

const tmi = require('tmi.js');
var exec = require("child_process").exec;
var execFile = require('child_process').exec;
var child;

.
.
.

(edited out)

.
.
.

// Register our event handlers (defined below)
client.on('connected', (address, port) => {
    client.action('account', 'phrase');

        child = execFile('/path/script.py, function(error, stdout, stderr) {
        if (error) {
            throw error;
            return;
        }
    });

});

client.on('chat', (channel, user, message, self) => { 
    if (message === '!exec') {

   child.kill(); //kills the child process.
}
});

这是示例代码。以下代码使用子进程启动mongo服务器,十秒钟后它将被杀死。

const child = require('child_process');
const ls = child.exec('mongod --dbpath ~/Documents/myown/learning/mongo', (err, stdout, stderr) => {
    if(err) {
        console.log(err);
    }
    else {
        console.log(stdout);
    }
});

setTimeout(() => {
    ls.kill();
}, 10000);