gpt4 book ai didi

Perl,等待非子进程退出

转载 作者:行者123 更新时间:2023-12-05 03:15:57 25 4
gpt4 key购买 nike

我有一个脚本,用于在自定义服务器环境中重新部署几个程序(即:不是已建立的具有代码热交换的标准容器)。为此,它会关闭服务器进程,但这些进程需要一些时间才能完全关闭所有连接。这些不是 perlscript 的子进程。它们通常一次运行数百天,所以我宁愿不必将服务器进程包装在 perlscripts 中,这样我就可以 fork 它们以在数月或数年后优雅地关闭它们。

所以目前要等待它们在重新部署期间死掉,我正在解析 ps -ef 的输出,获取 pid 字段,杀死那个 pid,等待 60 秒,(这似乎是合理的这些进程的时间),重新检查 ps -ef 以确保它们已死,等等。继续进行复制、chmod 等。

我觉得这个解决方案很蹩脚/笨拙。我到处搜索,但没有看到关于这个特定主题的任何内容; waiting on forked children的资料一大堆,waitpid要是这样操作就完美了。

来自阅读How to wait for exit of non-children processes (这是特定于 c 的)我猜除了读取/proc/pid 之外,我真的无能为力,但我想也许会有一个特定于 perl 的解决方案某处。有什么想法吗?

最佳答案

您可以使用 kill 0, $pid(成功时返回 1,失败时返回 0)而不是重新检查 ps -ef,但这可能会导致 pid 可能已被重用。

如果您已经有 ps 解析代码,可能不值得切换,但是有 Proc::ProcessTable .

除此之外,没有其他想法。

关于Perl,等待非子进程退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com