我对Monit有疑问。
我写了一个多线程C ++进程。它调用的主要和一些线程对我的应用程序至关重要,需要无限期地生存。
include <thread.h>
.......
std::thread Thread_1( );
Thread_1.detach();
std::thread Thread_2();
Thread_2.detach();
std::thread Thread_3();
Thread_3.detach();
如何创建.pid文件以配置Monit?
我是否需要单独监督所有线程PID,或者只监控主线程?如果我输入我的shell
pidof main
我可以获得main的PID(不是其他线程的pid),但是在重启后它会改变
非常感谢您的耐心
答案 0 :(得分:0)
监视主进程并让主进程监视线程。 (最简单的方法)
您可以使用pidfile(man 3 pidfile)来管理Linux / BSD下的pidfiles。您可以使用getpid()获取当前进程的PID并将其写入文件。使用Monit监控此文件。您可以为线程实现看门狗机制和/或使用信号处理程序(在程序内)。
监视机制可以是由给定intervall中的线程递增的变量。主进程检查变量是否在该间隔中递增。 (如果线程在递增时挂起,则需要锁定,可能出现死锁)。
如果要检查,如果std :: thread正在运行,请在此处查看答案:How to check if a std::thread is still running?