使用Monit监控C ++多线程进程

时间:2014-12-21 21:28:32

标签: c++ linux multithreading monit

我对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),但是在重启后它会改变

非常感谢您的耐心

1 个答案:

答案 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?