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

在写一个简单工具的unit testing时,我无法获得以require('child_process').spawn的subprocess的进程退出代码。 为了简化如果下来,考虑这个简单的节点命令退出代码35:

 SHELL> node -e“process.exit(35)”&
 [1] 23427
 [1] +赛义达35节点-e“process.exit(35)”

现在考虑下面的文件,上面的命令用execspawn执行。 目标是捕捉退出代码:

shell>猫WTF.js 
 var cp = require('child_process');

 cp.exec('node -e“process.exit(35);”',function(err){
   console.log('child exit code(exec)',err.code);
 });

 cp.spawn('node',['-e',''process.exit(35);“'])。on('exit',function(code){
   console.log('孩子退出代码(spawn)',代码);
 });

但是当它运行…惊喜:

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

我在产卵召唤中错过了一些明显的东西吗?

 SHELL> node --version 
 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);" (一个string文字),它基本上是一个空操作,所以它退出代码0。