重新启动linux守护进程
Restarting a linux daemon
我有一个用C++编写的Linux守护进程,当用户通过其控制台通过网络发出"重新启动"命令时,它应该会重新启动。这可能吗?我使用/etc/init.d
脚本。如何对其进行编程以重新启动?我是否应该启动一个延迟很长(一分钟)的新进程,然后再次启动shell脚本?问题是守护进程可能需要很长时间才能关闭,在最坏的情况下可能需要一分钟以上的时间。
应用程序基本上有三种重启方式:
-
当应用程序被告知重新启动时,它会进行适当的清理,释放分配的所有资源,然后像从头开始一样重新初始化。
-
派生一个新进程,在该进程中,新的子进程执行自身,父进程正常退出。
-
守护进程实际上只是一个包装应用程序,很像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脚本应该只是杀死您的守护进程并重新启动它。不要试图从守护进程重新启动守护进程。
相关文章:
- 为什么我应该使用 fork() 来守护我的进程?
- 守护进程()有什么缺点吗?
- boost-asio 作为守护进程的"template"
- Linux 守护进程 - 运行函数两次
- Unix域套接字(C++)-客户端使服务器守护进程崩溃
- HHVM-运行资源丰富的php守护进程
- DBUS 代码在放置在守护进程内时崩溃,但在没有守护进程代码的独立独立 main() 函数中运行良好
- 启动-停止守护进程启动的C程序无法捕获信号
- 如何使本机Unix/Linux守护进程在Android上工作
- 创建C++守护进程并保护环境
- 与守护进程对话
- 从服务器套接字创建守护进程处理
- 在服务器上执行守护进程
- API控制Linux守护进程
- 程序(nload)在shell中执行时作为守护进程运行,但不在启动/自动化脚本中执行
- c++守护进程服务器停止
- 我不希望一个作为守护进程的服务器进程关闭——即使在收到终止信号时也是如此.有什么办法可以确保这一点吗
- C++守护进程不会收到 SIGCHLD 信号
- 如何为apache守护进程设置LD_LIBRARY_PATH
- 监视守护进程的状态