Node.js为什么一个subprocess不能马上启动?

我试图编写一个全局的节点命令行程序,将采取任何(Windows或Unix)控制台命令我给它,并在新的控制台窗口中执行它。 我也希望程序在产生它的进程后退出,所以我使用的控制台没有被运行subprocess的节点脚本阻塞。

这是我迄今为止的简单版本:

myScript.js:

var exec = require('child_process').exec; exec("start startScript.cmd"); // windows start command opens a new cmd window process.exit(0); 

startScript.cmd:

 mkdir test 

我也试过这个(但是,即使没有process.exit,这也不起作用):

myScript.js:

 var spawn = require('child_process').spawn; var child = spawn('start', ['startScript.cmd'], { detached: true, stdio: ['ignore', 'ignore', 'ignore']}); child.unref(); process.exit(0); 

问题是,调用process.exit()似乎阻止subprocess完全启动,所以什么也没有发生,除非我做一些setTimeout shenanigans。 但是这种行为似乎是随机的 在不同的计算机上,它的行为就像我想要的那样。 两台计算机都有相同版本的节点(v0.10.33)。

除非我删除process.exit行或使用setTimeout,否则目录testing永远不会生成。

任何想法为什么发生这种情况或如何解决它? 请记住,我不想等到subprocess结束。 我希望能够立即返回到我的命令行。

谢谢!

我想到了。

答案是:不要使用exec,也不要在spawn调用中使用start或call或者其他奇怪的windows命令。 如果需要在产生选项中设置CWD,并直接产生你想要的东西,或者创build一个操作系统特定的脚本来调用你的命令,如果它仍然不起作用。 Windows脚本的一个例子就是:

 %* 

这样,启动或任何其他奇怪的Windows命令将被正确执行(但你真的需要它们?)。