Node.js为什么不立即启动子进程
Node.js why does a child process not start right away?
我正在尝试编写一个全局节点命令行程序,该程序将接受我给它的任何(windows或unix)控制台命令,并在新的控制台窗口中执行它。我还希望程序在生成进程后退出,这样我使用的控制台就不会被运行子进程的节点脚本阻止。
这是我迄今为止所拥有的一个简单版本:
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
我也尝试过这个(但即使没有流程,这个也不起作用。退出):
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()似乎会阻止子进程完全启动,所以除非我做一些setTimeout恶作剧,否则什么都不会发生。然而,这种行为似乎是随机的。在另一台计算机上,它的行为就像我希望的那样。两台计算机都有相同版本的节点(v0.10.33)。
除非我删除process.exit行或在其上使用setTimeout,否则永远不会进行目录测试
你知道为什么会发生这种事,或者如何避开它吗?请记住,我不想等到子进程完成。我希望能够立即返回我的命令行。
谢谢!
我想明白了。
答案是:不要使用exec,也不要在派生调用中使用start或call或任何其他奇怪的windows命令。如果需要,请在生成选项中设置CWD,然后直接生成您想要的内容,或者制作一个特定于操作系统的脚本,在命令仍然不起作用时调用您的命令。windows脚本的一个例子就是:
%*
这样,start或任何其他奇怪的windows命令都会被正确执行(但你真的需要它们吗?)。
相关文章:
- 子进程未接收消息
- 如何通过子进程连接Java应用程序后在node.js中编写文件
- 节点.js子进程中的运行函数
- 是否可以从在Firefox或IE的网页中运行的Javascript启动Windows进程
- 如何将画布对象从子进程流式传输回 Node.js
- 如何在Firefox插件中向子进程发送消息,如Chrome原生消息
- 从生成的子进程中获取信息的最佳方法
- 在 Node.js 中使用 Jasmine 测试子进程发送
- 在快速服务器中生成子进程
- 如何在 node.js 中关闭子进程的 stdio 管道
- 如何使用并行子进程在大型数组上执行“工作”
- 使用 node.js (子进程) 运行 shell 脚本
- 如何从nodejs中的守护进程生成gpg子进程
- Cloud9 在生成子进程时抛出错误,是否有解决方法
- 如何在从 Meteor.method 返回之前等待子进程结果
- 将输入数据发送到节点.js中的子进程
- Node.js为什么不立即启动子进程
- 如何重新启动Node.js子进程
- 操作由Grunt任务启动的脚本中的子进程
- 如何在node.js中启动一个全新的进程(不是子进程)