重启linux守护进程

时间:2014-04-24 13:57:43

标签: c++ linux daemon start-stop-daemon

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

4 个答案:

答案 0 :(得分:1)

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

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

  2. 分叉一个新进程,其中新的子进程执行自己并且父进程正常退出。

  3. 守护进程实际上只是一个包装器应用程序,就像一个init-script。它会分配一个运行实际应用程序的新进程,而父进程只是等待它退出。如果子进程(和实际应用程序)返回一个特殊的退出代码,则意味着它应该重新启动,以便forks / execs重新进行。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

做你需要做的任何关闭/清理,然后调用它:

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

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

答案 3 :(得分:0)

你的init脚本应该杀死你的守护进程并重新启动它。不要尝试从守护进程重启守护进程。