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

时间:2016-04-30 20:57:55

标签: javascript node.js exit child-process

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

SHELL> node -e "process.exit(35)" &
[1] 23427
[1]+  Saída 35               node -e "process.exit(35)"

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

SHELL> cat 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('child exit code (spawn)', code);
});

但是当它运行时......惊喜:

SHELL> node WTF.js
child exit code (exec) 35
child exit code (spawn) 0

我在spawn电话中错过了一些明显的东西吗?

SHELL> node --version 
v6.0.0

1 个答案:

答案 0 :(得分:7)

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退出。