重新启动linux守护进程

Restarting a linux daemon

本文关键字:进程 守护 linux 重新启动      更新时间:2023-10-16

我有一个用C++编写的Linux守护进程,当用户通过其控制台通过网络发出"重新启动"命令时,它应该会重新启动。这可能吗?我使用/etc/init.d脚本。如何对其进行编程以重新启动?我是否应该启动一个延迟很长(一分钟)的新进程,然后再次启动shell脚本?问题是守护进程可能需要很长时间才能关闭,在最坏的情况下可能需要一分钟以上的时间。

应用程序基本上有三种重启方式:

  1. 当应用程序被告知重新启动时,它会进行适当的清理,释放分配的所有资源,然后像从头开始一样重新初始化。

  2. 派生一个新进程,在该进程中,新的子进程执行自身,父进程正常退出。

  3. 守护进程实际上只是一个包装应用程序,很像init脚本。它分叉一个运行实际应用程序的新进程,而父进程只是等待它退出。如果子进程(和实际应用程序)返回一个特殊的退出代码,这意味着它应该重新启动,以便fork/exec重新启动。

请注意,第2点和第3点基本相同。

将重启分解为两个步骤,停止和启动。如果你的程序需要时间停止,它应该在停止函数中处理,我不能评论具体细节,因为我不知道你的用例,但我想监控进程以检查它是否被终止将是停止的一种优雅方式

执行需要执行的任何关闭/清理操作,然后调用此命令:

execl( argv[0], argv, reinterpret_cast< char* >( 0 ) );

就像fork()和exec()一样,但跳过fork。exec将用自己的新副本替换当前进程。查阅http://linux.die.net/man/3/exec

您的init脚本应该只是杀死您的守护进程并重新启动它。不要试图从守护进程重新启动守护进程。