我希望从另一个node.js文件同步执行node.js文件。这是我的,但它的异步。
var spawn = spawn('node', ['./file.js']);
spawn.stdout.on('data',function(data){});
答案 0 :(得分:2)
根据您在问题中的评论,听起来您不希望希望它是同步的,并且您不关心它的输出。
如果您只是想解雇其他进程并忘记,无需关注或关注何时结束,您已经使用的内容(spawn
)就是这样做的。
如果您希望真正发射,那么您需要指定detached
选项,以便在您的进程终止时不会终止子进程。来自文档:
如果设置了
detached
选项,子进程将成为新进程组的领导者。这使得孩子可以在父退出后继续运行。
进一步向下看,显然你也必须unref
:
默认情况下,父级将等待已分离的子级退出。要防止父级等待给定的子级,请使用
child.unref()
方法,父级的事件循环不会将子级包含在其引用计数中。
显然处理stdio
:
使用
detached
选项启动长时间运行的进程时,除非提供的stdio
配置未连接到父进程,否则该进程不会在后台继续运行。如果继承了父级的stdio,则子级将保持连接到控制终端。
所以:
spawn('node', ['./file.js'], {
detached: true,
stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();