nodejs:child_process.spawn未报告退出代码

nodejs: child_process.spawn not reporting exit code

本文关键字:报告 退出 代码 spawn process child nodejs      更新时间:2023-09-26

在为一个简单的工具编写单元测试时,我无法获得用require('child_process').spawn启动的子进程的进程退出代码。为了简化if down,请考虑这个简单的节点命令,它以代码35:退出

SHELL>节点-e"进程.退出(35)"&[1] 23427[1] +Saída 35节点-e"进程.退出(35)"

现在考虑以下文件,其中使用execspawn执行上面的命令。目标正在捕获退出代码:

SHELL>猫WTF.jsvar cp=require('child_process');cp.exec('node-e"process.exet(35);"',函数(err){console.log('儿童退出代码(exec)',错误代码);});cp.spawn('node',['-e','"process.exet(35);"']).on('exit',函数(代码){console.log('child exit code(spawn)',code);});

但当它运行时。。。惊喜:

SHELL>节点WTF.js子退出代码(exec)35子退出代码(派生)0

我是不是错过了关于产卵的电话?

SHELL>节点——版本v6.0.0

spawn()的第二个参数中删除双引号,spawn()将自动负责确保参数不会因空格等而意外分离:

cp.spawn('node', ['-e', 'process.exit(35);'])
  .on('exit', function(code){
    console.log('child exit code (spawn)', code);
  });

否则,节点将传递的(js)代码视为"process.exit(35);"(字符串文本),这基本上是一个无操作,因此它以代码0退出。