【问题标题】:Pass SIGTSTP signal to all processes in a job in LSF将 SIGTSTP 信号传递给 LSF 中作业中的所有进程
【发布时间】:2016-01-14 21:16:11
【问题描述】:

简而言之:LSF 中有没有办法将信号 SIGCONT/SIGTSTP 传递给在作业中运行的所有进程?

我有一个在 LSF(版本 9.1.2)上运行的 Perl 包装脚本,并在与 Perl 脚本相同的 LSF 机器上启动一个工具(源不可用)。

该工具启动 2 个进程,一个用于许可证管理,另一个用于执行实际工作。它还支持向两个进程发送 SIGSTSP/SIGCONT 将释放/重新获取许可证的选项(这是我希望实现的)。

运行bkill -s SIGCONT <JOB_ID>只会恢复工具进程,而不是许可进程,这是一个问题。

我试图查看是否可以将信号发送到 Perl 脚本自己的 PGID,但许可进程启动了自己的进程组。

欢迎任何关于通过 Perl 或 LSF 选项前进的建议。

谢谢, 阿布舍克

【问题讨论】:

  • 一些附加信息:我在 RHEL6 上运行,使用 Perl 5.16.2。

标签: perl lsf


【解决方案1】:

我试图查看是否可以将信号发送到 Perl 脚本自己的 PGID,但是许可进程启动了它自己的进程组。

这很可能是您的问题。 LSF 按进程组跟踪“在作业中运行的进程”。如果您的作业生成了一个在其自己的进程组中运行的进程(例如通过守护进程),那么它本质上是一个不受 LSF 控制的失控进程——管理它成为您的作业的责任。

有关参考,请参阅“分离的进程”部分here

关于选项:

  1. 我认为 cgroups 跟踪功能在很多情况下都有帮助,您可以询问您的管理员是否在 lsf.conf 中设置了 LSF_PROCESS_TRACKINGLSF_LINUX_CGROUP_ACCT。如果不是,那么你可以让他设置它们,看看这是否对你的情况有帮助(你需要确保你运行的主机支持 cgroups)。在 9.1.2 中,此功能在安装时打开,因此由于各种原因(例如,您的主机未启用 cgroups),此选项实际上可能对您没有帮助。
  2. 自行管理许可流程。如果您可以从 perl 脚本中找到许可过程的 PID/PGID,您可以使用 sigtrap 等在您的脚本中为 SIGCONT/SIGSTP 安装自定义信号处理程序并将它们转发到当您的脚本通过bkill 收到它们时,您自己进行许可处理。见here

【讨论】:

  • 感谢您的回答。这是有用的信息。我将与我的 LSF 管理员核实您建议的 LSF 设置。同时,我还将探索在 Perl 中通过会话 ID 跟踪进程的方法,因为我看到给定作业的每个进程都具有相同的会话 ID。
猜你喜欢
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多