我正在构建一个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。
最佳答案
您可以执行以下操作:
启动应用程序时,请通过另一个脚本启动它。这将产生子进程并根据需要将其杀死。
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。