首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:execv/execvp不使用现有PID

问C++:execv/execvp不使用现有PID
EN

Stack Overflow用户
提问于 2012-12-18 17:56:27
回答 1查看 954关注 0票数 2

我有一个作为linux服务运行的C++程序。该程序的一些命令行选项只需在其配置文件中设置值,然后退出,这就需要重新启动服务来获取新的配置。为了使服务继续不间断地运行,它的工作方式如下:

  • 后台服务在系统引导上启动
    • 后台服务创建一个“配置监视狗”线程监视配置文件。

​

  • 用户从命令行运行“progname选项”
    • 修改配置文件
    • 程序出口的命令行实例
    • 后台服务配置看门狗线程检测到配置更改,触发器重新启动。

​

当程序在读取新配置后重新启动时,我将调用execv,以便它将保持与原始实例相同的进程空间,从而可以继续作为服务进行管理。问题是execv的行为并不像预期的那样,而是终止现有的进程并在新的进程中重新启动。由于PID不再匹配,如果在此之后尝试运行‘服务progname stop/restart’,它将不能正常工作,'stop‘将使服务继续运行,'restart’将生成程序的一个重复实例。

我已经确认,将argv传递给execv是可执行文件的完整路径,所以它不应该通过shell在路径中搜索可执行文件(这也应该因为我使用execv而不是execvp这一事实而被阻止),因为我已经阅读了在其他应用程序中引起类似问题的文章。

EN

回答 1

Stack Overflow用户

发布于 2012-12-18 22:20:03

发现问题时,问题是程序在启动时使用守护进程(),这在内部执行叉/exec,在重新启动程序时再次调用daemon()。在增强它以区分开始/重新启动和避免再次调用守护进程()之后,问题就解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13938736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档