gpt4 book ai didi

linux - 如何实现一个流程来监督另一个流程?

转载 作者:太空狗 更新时间:2023-10-29 12:41:44 25 4
gpt4 key购买 nike

目前在我的工作场所,我有一个名为“batch launcher”的脚本(用 bash 编写),它应该监督批处理的执行,记录它们的输出并处理批处理的返回码.目前这是通过此“批量启动器”中的 env 调用完成的:

env $BATCH_ENV $BATCH_NAME $BATCH_OPTIONS >> $OUT_FILE 2>&1

几天前,用 perl 编写的批处理之一对 PGID 进行了 kill 调用(以消除所有 fork 的 child ),并且由于“批处理启动器”与它生成的任何东西共享 PGID,它得到了也被这个电话杀死了。

我应该如何正确地确保任何 PGID 终止调用都会使“批处理启动器”完好无损,并报告它正在监督的进程已被终止?

到目前为止,我听说过 setsid -w 命令可以解决这个问题,但我无法将它与 env 调用结合使用。

最佳答案

我犯了一个愚蠢的错误,就是查阅在线文档而不是在我当前工作的系统中调用 man。这page声明 setsid 支持标志,日期为 2014 年 7 月。我的手册页日期为 1993 年 11 月(我在 RHEL 5 上工作),并且没有任何标志支持。

发生的事情是 setsid 试图将 -w 标志解析为文件名,导致 execvp: No such file or directory错误。一旦我删除了标志,一切正常。结束命令现在看起来像:

env $BATCH_ENV setsid $BATCH_NAME $BATCH_OPTIONS >> $OUT_FILE 2>&1

现在从“批量启动器”启动的任何东西都被分配了等于 $BATCH_NAME 的 PID 的 SID 和 PGID,并且终止对 $BATCH_NAME 的 PGID 的调用留下“批处理启动器”不受影响,它现在愉快地报告返回状态 143 (SIGTERM)。

关于linux - 如何实现一个流程来监督另一个流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40362415/

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