繁体   English   中英

重启linux守护进程

[英]Restarting a linux daemon

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM