问题陈述简而言之:LSF中是否有办法将SIGCONT / SIGTSTP信号传递给作业中运行的所有进程?
我有一个在LSF(版本9.1.2)上运行的Perl包装器脚本,并在与Perl脚本相同的LSF机器上启动一个工具(Source not available)。
该工具启动2个流程,一个用于许可证管理,另一个用于执行实际工作。它还支持一个选项,即向两个进程发送SIGSTSP / SIGCONT将释放/重新获取许可证(这是我希望实现的)。
运行bkill -s SIGCONT <JOB_ID>
仅恢复工具流程而不是许可证流程,这是一个问题。
我试着看看我是否可以将信号发送到Perl脚本自己的PGID,但许可证流程启动了自己的流程组。
欢迎任何有关推进Perl或LSF选项的建议。
谢谢, 阿布舍克巴克
答案 0 :(得分:3)
我试着看看是否可以将信号发送到Perl脚本自己的PGID ,但许可证流程会启动自己的流程组。
这可能就是你的问题。 LSF通过进程组跟踪“作业内运行的进程”。如果你的工作产生了一个在自己的进程组中运行的进程(例如通过daemonizing自身),那么它本质上是LSF无法控制的失控进程 - 管理它就成了你的工作。
供参考,请参阅“分离的流程”here部分。
至于选项:
LSF_PROCESS_TRACKING
和LSF_LINUX_CGROUP_ACCT
。如果不是,那么你可以让他设置它们,看看这对你的情况是否有帮助(你需要确保你运行的主机支持cgroup)。在9.1.2中,此功能在安装时打开,因此该选项实际上可能由于各种原因而无法帮助您(例如,您的主机没有启用cgroup)。perl
脚本中找到许可证流程的PID / PGID,则可以使用SIGCONT
在脚本中为SIGSTP
/ sigtrap
安装自定义信号处理程序等等,并在脚本通过bkill
收到许可证时,将它们转发给许可证流程。见here。