从自身重新启动node.js应用程序,同时保持stdin和readline可用

时间:2017-04-02 16:46:13

标签: node.js

我希望能够使用readline,退出当前进程并重新启动它,保持stdin和readline功能。

示例代码如下:

var readline = require('readline');
var fork = require('child_process').fork;

console.log("argv:", process.argv);

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', (input) => {
  console.log(`>>>: ${input}`);

  if (input==="exit"){
    process.exit();
    return;
  }

  if (input==="restart"){
    rl.close(); // whatever, has no effect
    restartApp();
    return;
  }
});

function restartApp() {
  process.on('exit', (code) => {
    console.log(`About to exit with code: ${code}`);

    var forked = fork(process.argv[1], ["RESTARTED"]);
  });

  process.exit();
}

当此脚本运行时,它将等待用户键入“exit”或“restart”字符串。

一切都很好,直到它重新启动并在stdin上发送一个击键,抛出以下错误:

events.js:161
      throw er; // Unhandled 'error' event
      ^

Error: read EIO
    at exports._errnoException (util.js:1028:11)
    at TTY.onread (net.js:572:26)

我如何防止此错误?

我正在阅读child_process文档以及readline,但缺少某些内容。

似乎按键被发送到旧进程。

是的,我知道nodemon,forever和pm2模块。他们可以“解决”这个问题,但我想学习我所缺少的东西。

0 个答案:

没有答案