我正在使用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}`);
});
}
});
我在这个问题上工作了一段时间,没有太大进展。任何见解都将受到赞赏!
答案 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);