问题标签 [watchdog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
188564 浏览

c# - 如何验证 Windows 服务是否正在运行

我有一个 C# 应用程序(在 XP 嵌入式上运行 2.0),它与作为 Windows 服务实现的“看门狗”通信。当设备启动时,此服务通常需要一些时间才能启动。我想从我的代码中检查服务是否正在运行。我怎样才能做到这一点?

0 投票
3 回答
1705 浏览

process - FreeBSD 中的无限循环

我有一个不断出现段错误的脚本——因为段错误我无法解决的问题是在 python libxml 绑定中——没有写这些。好的,所以在 Linux 中,我曾经运行过一个 inf.loop,这样当脚本终止时 - 它会重新启动,如下所示:

好吧,我似乎在 FreeBSD 中找不到 /bin/bash ,所以这不起作用。

有任何想法吗?考虑到 cron 不是一个选项 - 允许的停机时间是几秒钟。

0 投票
3 回答
21773 浏览

c - 从用户空间,我如何判断 Linux 的软看门狗是否配置为没有出路?

我正在为 Linux 编写系统监视器,并希望包含一些看门狗功能。在内核中,即使 /dev/watchdog 关闭,您也可以配置看门狗继续运行。换句话说,如果我的守护进程正常退出并关闭 /dev/watchdog,系统仍会在 59 秒后重新启动。这可能是也可能不是用户想要的行为。

我需要让我的守护进程知道这个设置,因为它会影响我处理 SIGINT 的方式。如果设置为开启,我的守护程序将需要(最好)在退出时启动有序关闭,或者(至少)警告用户系统将很快重新启动。

有谁知道从用户空间获取此设置的方法?我在 sysconf() 中看不到任何获取值的内容。同样,我需要能够判断是否启用了软件看门狗。

编辑:

Linux 提供了一个非常简单的看门狗接口。进程可以打开 /dev/watchdog ,一旦设备打开,内核将开始倒计时 60 秒以重新启动,除非将一些数据写入该文件,在这种情况下时钟会重置。

根据内核的配置方式,关闭该文件可能会也可能不会停止倒计时。从文档中:

如果设备 /dev/watchdog 正确关闭,则可以停止看门狗而不会导致重新启动,除非您的内核是在启用 CONFIG_WATCHDOG_NOWAYOUT 选项的情况下编译的。

我需要能够判断 CONFIG_WATCHDOG_NOWAYOUT 是否是从用户空间守护进程中设置的,以便我可以以不同的方式处理所述守护进程的关闭。换句话说,如果该设置很高,那么简单:

... 将在 59 秒内重新启动系统,因为不再向 /dev/watchdog 写入任何内容。因此,如果它设置为高,我的 SIGINT 处理程序需要做额外的事情(即至少警告用户)。

我找不到从用户空间获取此设置的方法:(感谢任何帮助。

0 投票
8 回答
10696 浏览

embedded - 如何调试看门狗超时

我的微控制器中有一个看门狗,如果它没有被踢,将重置处理器。我的应用程序在一段时间内运行良好,但最终会重置,因为看门狗没有被踢。如果我逐步执行该程序,它可以正常工作。

有什么方法可以调试这个?

编辑:结论:我发现我的错误的方式是看门狗面包屑。

我正在使用具有高 ISR 向量和低 ISR 向量的 PIC。高向量用于处理 LED 矩阵,而低向量用于处理计时器滴答声。但是我将两个 ISR 处理程序都放在了高向量中。因此,当我禁用 LED 矩阵 ISR 并且计时器滴答 ISR 需要服务时,处理器将卡在低 ISR 以处理计时器滴答,但计时器滴答处理程序不存在。

面包屑将我的搜索限制在处理 LED 矩阵并专门禁用 LED 矩阵中断的函数上。

0 投票
4 回答
1605 浏览

crash-dumps - 当我的应用程序锁定在客户的机器上时,崩溃报告看门狗

我正在使用一个有些不可靠的(Qt/windows)应用程序,部分是由第三方为我们编写的(只是想把责任推到那里)。他们的最新版本更稳定。有点。我们收到的崩溃报告越来越少,但我们收到很多关于它只是挂起并且永远不会回来的报告。情况是多种多样的,由于我们收集到的信息很少,我们无法重现问题。

所以理想情况下,我想创建某种看门狗,它会注意到应用程序已锁定,并提供向我们发送崩溃报告。好主意,但有问题:

  • 看门狗如何知道进程已挂起?大概我们检测应用程序以定期向看门狗说“一切正常”,但我们将其放在哪里,以保证它足够频繁地发生,但不太可能位于应用程序最终运行时的代码路径上锁定。

  • 当崩溃发生时,看门狗应该报告什么信息?Windows 有一个不错的调试 api,所以我相信所有有趣的数据都可以访问,但我不确定什么对追踪问题有用。

0 投票
7 回答
1765 浏览

debugging - 如何判断哪个任务死了?

我有一个嵌入式系统,它有多个(> 20)任务以不同的优先级运行。我也有运行看门狗任务来检查所有其他任务是否没有卡住。我的看门狗正在工作,因为每逢蓝月亮,它都会重新启动系统,因为任务没有签入。

如何确定哪个任务死亡?

我不能只责怪最旧的任务踢看门狗,因为它可能被没有让步的更高优先级任务推迟。

有什么建议么?

0 投票
4 回答
15746 浏览

c++ - 我可以使用 Boost Signals2 和 Threads 在 C++ 中创建软件看门狗定时器线程吗?

我目前正在单线程应用程序中从其他人的库中运行函数 Foo 。大多数时候,我打电话给 Foo,它真的很快,有时,我打电话给 Foo,它需要很长时间。我不是一个有耐心的人,如果 Foo 要永远占用,我想停止执行 Foo 并且不使用这些参数调用它。

以受控方式调用 Foo 的最佳方法是什么(我当前的环境是 POSIX/C++),这样我可以在一定秒数后停止执行。我觉得在这里做的正确的事情是创建第二个线程来调用 Foo,而在我的主线程中,我创建了一个计时器函数,如果第二个线程超时,它最终会发出信号。

还有另一种更合适的模型(和解决方案)吗?如果没有,Boost 的 Signals2 库和 Threads 会起作用吗?

0 投票
3 回答
16457 浏览

windows - 如何编写看门狗计时器以重新启动 Windows 服务?

我对另一个关于 Windows 服务看门狗计时器的问题的答案非常感兴趣(请参阅此处)。那个回答说:

我还使用了在另一个线程中运行的内部看门狗系统。该线程查看主线程的活动,如日志输出或切换事件。如果未看到该活动,则认为该服务已挂起,我将关闭该服务。

在这种情况下,您可以将 Windows 配置为自动重新启动已停止的服务,这可能会清除问题(只要它不是内部逻辑错误)。

我使用的服务也有写入日志的文本日志。除了即将“睡一会儿”的服务外,我还会记录下一次醒来的时间。我使用 MTAIL 来查看日志以获取输出。”

任何人都可以提供一些示例代码如何使用在另一个线程中运行的内部看门狗,因为我目前有一个任务来开发一个 Windows 服务,如果它失败、挂断等,它将能够自动重启。

我真的很感谢你的帮助。

0 投票
1 回答
2055 浏览

drupal - Drupal看门狗数据库表一遍又一遍地充斥着相同的消息?

我有:

  • 禁用的 cron
  • 禁用数据库日志记录
  • 清除了我的缓存
  • 注释掉显示为错误的代码

而且,同样的错误消息正在写入 Watchdog。我执行:“从看门狗中删除”,并在我检查看门狗表后立即出现同样的错误。

并不是说它会有所帮助,但这是错误:

所以,我的问题是:

  1. 有什么方法可以查看为什么会一遍又一遍地触发此特定错误?
  2. 什么可能“缓存”这个错误?
  3. 关于可能导致这种情况的任何其他想法?
0 投票
3 回答
2687 浏览

python - 在 python 中实现看门狗定时器的工具

我正在编写一些代码来测试多线程程序(学生作业——可能是错误的),并且希望能够检测到它们何时死锁。正常运行时,程序会定期将输出输出到标准输出,因此非常简单:如果 X 秒内没有输出,则终止它并报告死锁。这是函数原型:

我可以自己编写,但要正确使用有点棘手,所以如果可能的话,我更愿意使用现有代码。有人写过类似的吗?


好的,请参阅下面的解决方案。如果您正在做类似的事情,子流程模块也可能是相关的。