首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在守护进程中使用pigpio库时,"initMboxBlock: initMboxBlock失败“和”无法锁定/var/run/Pipio.id“

在守护进程中使用pigpio库时,"initMboxBlock: initMboxBlock失败“和”无法锁定/var/run/Pipio.id“
EN

Stack Overflow用户
提问于 2017-08-02 16:57:44
回答 1查看 1.1K关注 0票数 2

我正在使用node.js编写一个守护进程,运行在systemd下,它将使用监测树莓皮2B上电源电压的状态

我正在使用node.js包装器猪皮库

我开始使用的代码如下:

代码语言:javascript
复制
var Gpio = require('pigpio').Gpio,
gpio;

gpio = new Gpio(35);

const checkIntervalDuringBrownout   = 5000;
const checkIntervalDuringGoodSupply = 100;
var timer = 100;

function startTimer() {
  setTimeout(function() {
    var brownoutState = isUnderVoltage();

    if(brownoutState) {
      console.log("Brownout - telling the syslog ...");
      console.log("Brownout ... Power Supply Voltage went below 4.63 V");
      timer = checkIntervalDuringBrownout;
    }
    else {
      timer = checkIntervalDuringGoodSupply;
   }
    startTimer();
  }, timer);
}

function isUnderVoltage() {
  var ledStatus = gpio.digitalRead(); 
  if(ledStatus === 1) {
    return 0;
  }
  else if (ledStatus === 0) {
    //console.log("brownout");
    return 1;
  }
  else {
    console.log("We got neither a 1 or a 0: ", ledStatus);
  }
}

startTimer();

在syslog中得到神秘的错误消息:

代码语言:javascript
复制
    Aug  2 00:22:10 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js.
Aug  2 00:22:11 chintu brownout-monitor[5203]: 2017-08-02 00:22:11 initMboxBlock: init mbox zaps failed
Aug  2 00:22:11 chintu brownout-monitor[5203]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11
Aug  2 00:22:11 chintu brownout-monitor[5203]: pigpio.gpioInitialise();
Aug  2 00:22:11 chintu brownout-monitor[5203]: ^
Aug  2 00:22:11 chintu brownout-monitor[5203]: Error: pigpio error -1 in gpioInitialise
Aug  2 00:22:11 chintu brownout-monitor[5203]: at Error (native)
Aug  2 00:22:11 chintu brownout-monitor[5203]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12)
Aug  2 00:22:11 chintu brownout-monitor[5203]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3)

代码语言:javascript
复制
Aug  2 00:17:11 chintu systemd[1]: Starting Brownout Monitor and Logger written using node.js...
Aug  2 00:17:11 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js.
Aug  2 00:17:12 chintu brownout-monitor[4555]: 2017-08-02 00:17:12 initInitialise: Can't lock /var/run/pigpio.pid
Aug  2 00:17:12 chintu brownout-monitor[4555]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11
Aug  2 00:17:12 chintu brownout-monitor[4555]: pigpio.gpioInitialise();
Aug  2 00:17:12 chintu brownout-monitor[4555]: ^
Aug  2 00:17:12 chintu brownout-monitor[4555]: Error: pigpio error -1 in gpioInitialise
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Error (native)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Object.<anonymous> (/home/pi/sandbox/raspi2-power-monitor/index.js:7:8)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Module._compile (module.js:570:32)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Object.Module._extensions..js (module.js:579:10)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Module.load (module.js:487:32)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at tryModuleLoad (module.js:446:12)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Function.Module._load (module.js:438:3)
Aug  2 00:17:12 chintu brownout-monitor[4555]: at Module.runMain (module.js:604:10)
Aug  2 00:17:12 chintu systemd[1]: brownout-monitor.service: main process exited, code=exited, status=1/FAILURE
Aug  2 00:17:12 chintu systemd[1]: Unit brownout-monitor.service entered failed state.

查找这些错误,带我看了一页,其中的解决方案说-

我必须检查代码,但最有可能的是GPU (分配mbox内存)没有空闲内存。

怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2017-08-02 16:57:44

修复错误的解决方案是:

处理systemd发送到节点进程的信号,并确保pigpio库使用处理程序中的pigpio.terminate()调用完成干净的终止。

代码语言:javascript
复制
process.on('SIGHUP', shutdown);
process.on('SIGINT', shutdown);
process.on('SIGCONT', shutdown);
process.on('SIGTERM', shutdown);

function shutdown() {
  pigpio.terminate();
  clearInterval(timerVar);
  console.log('raspi2-brownout-watcher must exit, performed cleanup.');
  process.exit(0);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45466816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档