【问题标题】:How to replace node.js process with spawned child?如何用生成的子进程替换 node.js 进程?
【发布时间】:2014-01-24 07:01:41
【问题描述】:

我正在构建一个 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();

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

【问题讨论】:

    标签: javascript node.js terminal spawn child-process


    【解决方案1】:

    你可以这样做:

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

    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();
    

    child.js

    (function(){
      console.log("Started child process");
      setInterval(function(){console.log("running")}, 1000);
    })();
    

    然后你可以发送 ctrl+c 来杀死这个东西。要重新加载,请发送 ctrl+\ 或从您的更新函数调用 Mother.js。

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 2011-09-25
      • 2015-10-30
      • 2019-03-22
      • 1970-01-01
      • 2011-10-08
      • 2021-03-31
      • 2017-07-28
      • 2017-06-04
      相关资源
      最近更新 更多