0

可能重复:
node.js 同步执行系统命令

我希望从另一个 node.js 文件同步执行 node.js 文件。这就是我所拥有的,但它是异步的。

    var spawn = spawn('node', ['./file.js']);
    spawn.stdout.on('data',function(data){});
4

1 回答 1

2

从您在问题下的评论来看,听起来您希望它是同步的,并且您不关心它的输出。

如果您只是想触发另一个进程并忘记,而不看它或关心它何时结束,那么您已经使用的 ( spawn) 会执行此操作。

如果您想真正做到一劳永逸,您需要指定该detached选项,这样子进程就不会在您的进程终止时被杀死。从文档:

如果detached设置了该选项,则子进程将成为新进程组的领导者。这使得子进程可以在父进程退出后继续运行。

再往下看,显然你也必须unref这样做:

默认情况下,父级将等待分离的子级退出。要防止父级等待给定的子级,请使用该child.unref()方法,并且父级的事件循环不会将子级包含在其引用计数中。

stdio显然要处理

使用该detached选项启动长时间运行的进程时,该进程将不会在后台保持运行,除非它提供了stdio未连接到父进程的配置。如果继承父级的 stdio,则子级将保持连接到控制终端。

所以:

spawn('node', ['./file.js'], {
    detached: true,
    stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();
于 2012-12-06T16:30:30.973 回答