C++ linux中可执行文件的管理器

C++ linux中可执行文件的管理器,c++,linux,monitor,C++,Linux,Monitor,我目前正在开发一个在linux上运行的可执行文件。我希望有一个监控程序来监控这个可执行文件,并重新启动它。有这样做的命令吗?或者给我提个建议 注意:代码是用c++编写的,最简单的方法就是自己生成进程,等待它退出,然后重新启动它。最简单的方法就是在shell脚本循环中完成。然而,一般来说,这种看门狗架构往往是脆弱的和容易出错的。为什么你的过程会死亡?重新启动时会发生什么?系统中是否有其他地方保留的状态假设您流程的当前“版本”与过去某个时间相同 一般来说,这只是没有做到。几乎总是最好将您的流程设计为

我目前正在开发一个在linux上运行的可执行文件。我希望有一个监控程序来监控这个可执行文件,并重新启动它。有这样做的命令吗?或者给我提个建议


注意:代码是用c++

编写的,最简单的方法就是自己生成进程,等待它退出,然后重新启动它。最简单的方法就是在shell脚本循环中完成。然而,一般来说,这种看门狗架构往往是脆弱的和容易出错的。为什么你的过程会死亡?重新启动时会发生什么?系统中是否有其他地方保留的状态假设您流程的当前“版本”与过去某个时间相同


一般来说,这只是没有做到。几乎总是最好将您的流程设计为处理一个事件/命令/请求的一次性流程,或者可靠地编写它,以便可以假定它始终处于活动状态。如果你不能做到这一点,只需将它包装在一个shell循环中。

这个主管已经存在,并且一直在运行。它被称为
init
,大多数版本由
/etc/inittab

中的条目控制,大多数linux发行版都附带了
,可以做您想要的事情,还有相当多的事情,比如检查内存、磁盘空间、连接等等

从中,您可以在monit配置文件中包含类似的内容:

check file with path /cifs/mydata
  if does not exist for 5 cycles then exec "/usr/bin/mount_cifs.sh"

如果看门狗的概念如此糟糕,为什么每个Linux实例都使用它呢?实际上Linux中没有任何东西是看门狗。当然,像httpd、mysqld等关键服务。。。不在典型安装中。核心的东西,比如dbus守护进程,同上。你有一个反例吗?系统中的许多小部件不需要单独进行过程监控和自动重启,但整个用户模式系统本身是这样的。在您想要命名的几乎所有linux发行版上,这是process 1的唯一功能,每个linux系统都必须拥有process 1。如果您想解释
init
所监视的进程的特征,并以此为基础声称这可能是解决OP问题的一个糟糕的选择,那么可以。但笼统地说它是“脆弱的和容易出错的”只表明你不懂Linux。嗯。。。寒冷我只是说,显式地编写一个期望被监视的应用程序是有问题的设计,并且与系统的现有范例背道而驰。FWIW:关于init,你基本上是错的。sysvinit、upstart和systemd都没有对现代linux发行版中的进程进行任何重要的监视(尽管systemd在将许多东西转化为具有相同属性的按需发布服务方面做得非常好)。试试看:杀死-9一些重要的东西,看看它是否会重新启动。