使用node.js启动另一个节点应用程序?

44

我有两个独立的Node应用程序。我希望其中一个能在代码的某个时刻启动另一个应用程序。我应该如何做到这一点?

2个回答

52

使用child_process.fork()。它类似于spawn(),但用于创建全新的V8实例。因此,它专门用于运行Node的新实例。如果您只是要执行一个命令,则使用spawn()exec()

var fork = require('child_process').fork;
var child = fork('./script');

请注意,使用fork()时,默认情况下,stdio流与父进程关联。这意味着所有输出和错误都将显示在父进程中。如果您不希望与父进程共享这些流,请在选项中定义stdio属性:

var child = fork('./script', [], {
  stdio: 'pipe'
});

那么您可以将该过程与主进程的流分开处理。

child.stdin.on('data', function(data) {
  // output from the child process
});

请注意,此过程不会自动退出。您必须在生成的Node进程内调用process.exit()以使其退出。


3
谢谢!我能否将参数传递给子进程 - 比如从父进程发送一个变量给它? - Hydrothermal
5
第二个参数作为数组传递参数。 代码示例:fork('./script, ['arg1','arg2']); 如果你想在子进程启动后传递变量,请使用 child.send() 并在子进程中使用 process.on('message', function(message) {}); 进行监听。 - hexacyanide
2
你好,你知道有没有一种方法可以测试一个Node.js子进程是否正在运行吗?-谢谢! - user603749
@hexacyanide 我们如何在子页面中从mongodb获取详细信息并将其发送到主页面以在控制台上打印。请查看http://stackoverflow.com/questions/43490211/how-to-fetch-the-details-from-mongo-db-and-send-or-store-in-object-in-nodejs-for - charan tej
我知道这个答案很久以前就有了,但是关于“请注意,进程不会自动退出。您必须从生成的Node进程中调用process.exit()才能使其退出。”这部分仍然相关吗?我在文档网站上搜索了一下,没有找到任何提及此事的内容。https://nodejs.org/api/child_process.html - joedotnot

3
您可以使用child_process模块,它可以执行外部进程。
var childProcess = require('child_process'),
     ls;

 ls = childProcess.exec('ls -l', function (error, stdout, stderr) {    if (error) {
     console.log(error.stack);
     console.log('Error code: '+error.code);
     console.log('Signal received: '+error.signal);    }    console.log('Child Process STDOUT: '+stdout);    console.log('Child Process STDERR: '+stderr);  });

 ls.on('exit', function (code) {    console.log('Child process exited with exit code '+code);  });

http://docs.nodejitsu.com/articles/child-processes/how-to-spawn-a-child-process


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接