将 SIGTSTP 信号传递给 LSF 作业中的所有进程
Pass SIGTSTP signal to all processes in a job in LSF
简而言之,问题陈述:LSF 中是否有一种方法可以将信号 SIGCONT/SIGTSTP 传递给作业中的所有进程 运行?
我有一个在 LSF(版本 9.1.2)上运行的 Perl 包装器脚本,并在与 Perl 脚本相同的 LSF 机器上启动一个工具(源不可用)。
该工具启动 2 个进程,一个用于许可证管理,另一个用于执行实际工作。它还支持一个选项,即向两个进程发送 SIGSTSP/SIGCONT 将 release/reacquire 许可证(这是我希望实现的)。
运行bkill -s SIGCONT <JOB_ID>
只恢复工具进程,不恢复许可进程,这是个问题。
我尝试查看是否可以将信号发送到 Perl 脚本自己的 PGID,但是许可进程启动了它自己的进程组。
欢迎通过 Perl 或 LSF 选项提出任何建议。
谢谢,
阿布舍克
I tried to see if I can send the signals to the Perl script's own PGID, but the license process starts its own process group.
这可能就是您的问题所在。 LSF 按进程组跟踪 "processes running within the job"。如果您的工作产生了一个在其自己的进程组中运行的进程(比如通过守护进程本身),那么它本质上是一个不受 LSF 控制的失控进程——管理它成为您工作的责任。
有关参考,请参阅 "Detached processes" here 部分。
至于选项:
- 我认为 cgroups 跟踪功能在很多情况下都有帮助,您可以询问您的管理员是否在 lsf.conf 中设置了
LSF_PROCESS_TRACKING
和 LSF_LINUX_CGROUP_ACCT
。如果不是,那么您可以让他设置它们,看看这对您的情况是否有帮助(您需要确保您 运行 所在的主机支持 cgroups)。在 9.1.2 中,此功能在安装时打开,因此由于各种原因(例如,您的主机没有启用 cgroups),此选项实际上可能无法帮助您。
- 自行管理许可流程。如果您可以从
perl
脚本中找到许可过程的 PID/PGID,则可以使用 [=15] 在脚本中为 SIGCONT
/SIGSTP
安装自定义信号处理程序=] 之类的,当您的脚本通过 bkill
接收到它们时,您自己将它们转发给许可流程。参见 here。
简而言之,问题陈述:LSF 中是否有一种方法可以将信号 SIGCONT/SIGTSTP 传递给作业中的所有进程 运行?
我有一个在 LSF(版本 9.1.2)上运行的 Perl 包装器脚本,并在与 Perl 脚本相同的 LSF 机器上启动一个工具(源不可用)。
该工具启动 2 个进程,一个用于许可证管理,另一个用于执行实际工作。它还支持一个选项,即向两个进程发送 SIGSTSP/SIGCONT 将 release/reacquire 许可证(这是我希望实现的)。
运行bkill -s SIGCONT <JOB_ID>
只恢复工具进程,不恢复许可进程,这是个问题。
我尝试查看是否可以将信号发送到 Perl 脚本自己的 PGID,但是许可进程启动了它自己的进程组。
欢迎通过 Perl 或 LSF 选项提出任何建议。
谢谢, 阿布舍克
I tried to see if I can send the signals to the Perl script's own PGID, but the license process starts its own process group.
这可能就是您的问题所在。 LSF 按进程组跟踪 "processes running within the job"。如果您的工作产生了一个在其自己的进程组中运行的进程(比如通过守护进程本身),那么它本质上是一个不受 LSF 控制的失控进程——管理它成为您工作的责任。
有关参考,请参阅 "Detached processes" here 部分。
至于选项:
- 我认为 cgroups 跟踪功能在很多情况下都有帮助,您可以询问您的管理员是否在 lsf.conf 中设置了
LSF_PROCESS_TRACKING
和LSF_LINUX_CGROUP_ACCT
。如果不是,那么您可以让他设置它们,看看这对您的情况是否有帮助(您需要确保您 运行 所在的主机支持 cgroups)。在 9.1.2 中,此功能在安装时打开,因此由于各种原因(例如,您的主机没有启用 cgroups),此选项实际上可能无法帮助您。 - 自行管理许可流程。如果您可以从
perl
脚本中找到许可过程的 PID/PGID,则可以使用 [=15] 在脚本中为SIGCONT
/SIGSTP
安装自定义信号处理程序=] 之类的,当您的脚本通过bkill
接收到它们时,您自己将它们转发给许可流程。参见 here。