如何用生成的子代替node.js进程?

Sid*_*Esw 4 javascript terminal spawn child-process node.js

我正在构建一个node.js应用程序并将其打包为二进制文件(使用nexe),并且如果有更新,则需要更新并重新启动该进程.当我生成新进程并退出时,我希望新进程接管终端,但这不会发生.这是我正在做的事情(使用child_process):

var spawn = require('child_process').spawn;
var child = spawn(process.execPath, process.argv, {
  cwd: process.cwd(),
  env: process.env,
  detached: true,
  stdio: 'inherit'
});
child.unref();
process.exit();
Run Code Online (Sandbox Code Playgroud)

子进程在终端上打印其所有控制台日志,但进入后台.我哪里错了?我正在使用OS X Mavericks.

piy*_*ush 5

你可以这样做:

启动应用程序时,通过另一个脚本启动它.这将生成子进程并根据需要将其终止.

mother.js

var child;
var spawn = require('child_process').spawn;
var argv =  process.argv;
argv.shift();
argv.shift();

function startChild(){
  console.log("STARTING", process.execPath, "child.js", argv);
  child = spawn(process.execPath,  ["child.js", argv], {
    cwd: process.cwd(),
    env: process.env,
    detached: true
  });
  child.on('error', function(e){console.log(e)});
  child.stdout.pipe(process.stdout);
  console.log("STARTED with PID:", child.pid);
}


process.on('SIGQUIT', function() {
  child.kill();
  startChild();
});
startChild();
Run Code Online (Sandbox Code Playgroud)

child.js

(function(){
  console.log("Started child process");
  setInterval(function(){console.log("running")}, 1000);
})();
Run Code Online (Sandbox Code Playgroud)

然后你可以发送ctrl + c来杀死它.要从更新函数重新加载发送ctrl + \或在mother.js中调用.