javascript - 在nodejs上杀死(如ctrl + c)exec(子进程)
问题描述
我在 index.js 中有以下代码:
var child = exec(
'node app.js --board=' + data.data.board + ' --link=' + data.data.link,
function (error, stdout, stderr) {
if (error) console.log('exec error: ' + error)
if (stderr) console.log('stderr: ' + stderr)
}
)
.stdout.on('data', function(log_data) {
console.log(log_data)
socket.emit('listener', { ty: 'user_p_logs', num: data.num, log: log_data })
fn(true)
})
这是 的代码run app.js
,但我无法停止此子进程index.js
我尝试了以下内容index.js
:
child.kill()
child.kill('SIGINT')
process.exit() // This stopped index.js, instead of its child.
更新:任何答案?
解决方案
您要分配的child
是 的返回值.stdout.on
,它是stdout
事件发射器,而不是child
进程。您需要它成为子进程。不要过度链接。:-)
var child = exec(
'node app.js --board=' + data.data.board + ' --link=' + data.data.link,
function (error, stdout, stderr) {
if (error) console.log('exec error: ' + error)
if (stderr) console.log('stderr: ' + stderr)
}
);
child.stdout.on('data', function(log_data) {
console.log(log_data)
socket.emit('listener', { ty: 'user_p_logs', num: data.num, log: log_data })
fn(true)
});
然后,child.kill
应该工作。
推荐阅读
- python - 如何解决 Flask Sqalchemy 完整性错误?
- amazon-web-services - 如何添加 cognito 用户名/密码来验证 ALB?
- r - 如何在不添加和删除列的情况下合并两个表
- google-cloud-platform - 需要 api 密钥的 Google API
- java - 不能使用对象数组
- sql - 如何在 T-SQL 的 AND 中使用 IF
- javascript - 如何在没有 MediaSession API 的情况下检测媒体密钥?
- python - 选择最小距离
- python - 熊猫检查拆分的数据框的字段是否包含值
- internationalization - NextJS:下一个翻译和 yaml 加载器