詹金斯杀死所有子进程

时间:2014-08-20 10:24:16

标签: jenkins

我有一个运行bash脚本的jenkins作业。

在bash脚本中,我有效地执行了两个操作,比如

java ApplicationA &
PID_A=$!
java ApplicationB
kill $PID_A   

但是如果手动中止作业,则ApplicationA仍然有效(在节点计算机上可以看到ps -ef)。我不能使用诱捕等等,因为如果jenkins发出9信号(陷阱不适用于9),那就不会有效。

如果可以将此作业配置为简单地杀死它产生的所有进程,那将是理想的,我该怎么做?

1 个答案:

答案 0 :(得分:18)

实际上,默认情况下,Jenkins有一个名为 ProcessTreeKiller 的功能,该功能负责确保在执行作业后仍有没有进程。< / p>

上面的链接说明了如何禁用该功能。你确定以某种方式错误地禁用了那个?

修改
根据作者的评论,基于有关禁用 ProcessTreeKiller 的信息,要实现反向,必须将环境变量BUILD_ID设置为Jenkins作业的构建ID。这样,当 ProcessTreeKiller 查看正在运行的进程以查找时,它也会发现这一点

export BUILD_ID=$BUILD_ID

您还可以使用 Build Result Trigger 插件,配置第二个作业来清理您的应用程序,并将其配置为监视ABORTED状态的第一个作业作为触发器