树莓皮看门狗C++;程序 我有C++应用程序在我的设备上运行,这是一个修改过的树莓Pi版本。应用程序正在从串行端口读取数据,我需要一个设备在收到某些特定数据后重新启动。我一直想知道如何将此功能与watchdog集成,但不知道如何实现。也许有可能从我的应用程序发送一些信号给看门狗,告诉它是时候重新启动了

树莓皮看门狗C++;程序 我有C++应用程序在我的设备上运行,这是一个修改过的树莓Pi版本。应用程序正在从串行端口读取数据,我需要一个设备在收到某些特定数据后重新启动。我一直想知道如何将此功能与watchdog集成,但不知道如何实现。也许有可能从我的应用程序发送一些信号给看门狗,告诉它是时候重新启动了,c++,raspberry-pi,watchdog,C++,Raspberry Pi,Watchdog,p.S.应用程序以systemd服务启动。为什么要这样做?使用看门狗的原因正是马可所描述的。如果系统没有响应,则看门狗触发。通常这是需要的,因为关闭的设备不再发送任何东西,因此需要某种触发器让系统知道应该重新启动。在这里,您已经从传入信号中获取触发器,因此看门狗是冗余的。只需在收到数据后重新启动即可。如果您希望设备在软件阻塞或无法访问时自动重新启动,那么Watchdog将非常有用 如果这是您想要实现的目标,那么看门狗是正确的选择。呼叫 std::system("sudo reboot"); 对

p.S.应用程序以systemd服务启动。

为什么要这样做?使用看门狗的原因正是马可所描述的。如果系统没有响应,则看门狗触发。通常这是需要的,因为关闭的设备不再发送任何东西,因此需要某种触发器让系统知道应该重新启动。在这里,您已经从传入信号中获取触发器,因此看门狗是冗余的。只需在收到数据后重新启动即可。

如果您希望设备在软件阻塞或无法访问时自动重新启动,那么Watchdog将非常有用 如果这是您想要实现的目标,那么看门狗是正确的选择。

呼叫

std::system("sudo reboot");

对我来说,这不是一个好主意,因为看门狗通常以相反的方式工作,看门狗在一段时间内没有收到外部设备的消息时会触发重启。在你的情况下,当你收到一些东西时,你只需要调用重新启动,这似乎没什么大不了的。@Marco当然调用重新启动是我想到的第一件事。但《看门狗》对我来说听起来更正确。不是吗?@oodessit
听起来
不是一个技术参数。Marco解释了如何使用看门狗,他指出您的案例与这种情况不符。这是问题的正确答案。但是,我不希望
sudo reboot
能在大多数安装中工作,因为它通常需要输入密码,而这可能是不可能的。你可以摆弄
/etc/sudoers
让给定用户无密码重新启动,但这很难看。直接使用
重新启动
(这需要以root用户身份运行主应用)。有关无密码重新启动,请参阅