【发布时间】:2017-09-20 19:10:58
【问题描述】:
我的节点进程正在死去,当进程退出时,我似乎无法登录到文件。这是一个长时间运行的进程,直接用node index.js 调用:
// index.js
const fs = require('fs');
exports.getAllCars = (process => {
if (require.main === module) {
console.log(`Running process: ${process.getgid()}.`);
let out = fs.createWriteStream(`${__dirname}/process.log`);
// trying to handle process events here:
process.on('exit', code => out.write(`Exit: ${code}`));
return require('./lib/cars').getAllCars();
} else {
return require('./lib/cars').getAllCars;
}
})(process);
还尝试为error、uncaughtException 创建事件处理程序。手动终止我的进程时没有任何效果(使用kill {pid})。文件process.log 已创建,但没有任何内容。可写流是否需要在完成时调用stream.end()?
【问题讨论】:
-
kill $PID发送一个 SIGTERM,因此请尝试为这些添加一个 signal handler。 -
嗯,我只是在使用
kill {pid}进行测试。我真正的用例是当进程刚刚结束而没有在任何地方记录任何错误时。自从我将错误处理放在那里以来,我还没有发生过这种情况。通常该过程会在约 4 小时后意外终止。 -
如果它在没有记录任何错误的情况下死掉,我的猜测是进程被杀死的外部原因(例如,Linux 上的 OOM 杀手)。
-
当然,现在我已经为
exit、error和uncaughtException设置了处理程序,该过程运行良好...¯\_(ツ)_/¯