【发布时间】:2011-07-05 11:07:42
【问题描述】:
我有一个脚本,用于在自定义服务器环境中重新部署几个程序(即:不是已建立的具有代码热交换的标准容器)。为此,它会关闭服务器进程,但这些进程需要一些时间才能完全关闭所有连接。这些不是 perlscript 的子进程。它们通常一次运行数百天,所以我宁愿不必将服务器进程包装在 perlscript 中,这样我就可以分叉它们,以便在几个月或几年后优雅地关闭它们。
所以目前等待他们在重新部署期间死亡,我正在解析ps -ef 的输出,获取 pid 字段,杀死该 pid,等待 60 秒,(对于这些进程来说,这似乎是一个合理的时间),重新检查ps -ef 以确保他们已经死亡等。继续复制、chmod 等。
这个解决方案让我觉得很蹩脚/笨拙。我已经用谷歌搜索了所有内容,但没有看到任何关于这个特定主题的内容;有一堆关于等待分叉孩子的材料,如果只有它以这种方式运行,waitpid 将是完美的。
通过阅读How to wait for exit of non-children processes(具体为c)我猜除了阅读 /proc/pid 之外,我真的无能为力,但我想也许会有一个特定于 perl 的某处的解决方案。有什么想法吗?
【问题讨论】: