我有一个运行嵌入式 Linux 的系统,它的持续运行至关重要。它基本上是一个与传感器通信并将数据中继到数据库和 Web 客户端的过程。
如果发生崩溃,如何自动重启应用程序?
此外,还有几个线程在进行轮询(例如套接字和 uart 通信)。如何确保没有线程挂起或意外退出?是否有易于使用且对线程友好的看门狗?
最佳答案
如 in this answer 所述,您可以使用 fork
和 waitpid
无缝重启您的进程。 .它不会消耗任何大量资源,因为操作系统将共享内存页面。
这只剩下检测挂起进程的问题。您可以使用 Michael Aaron Safyan 为此指出的任何解决方案,但更简单的解决方案是重复使用 alarm
系统调用,让信号终止进程(相应地使用 sigaction)。只要您不断调用 alarm
(即只要您的程序在运行),它就会一直运行。一旦你不这样做,信号就会触发。
这样,不需要额外的程序,只使用可移植的 POSIX 东西。
关于c - Linux 在崩溃时自动重启应用程序 - 守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376537/