【发布时间】:2020-07-19 07:05:42
【问题描述】:
Bamboo 中的“停止构建”按钮如何工作?我有一个调用 Python3 脚本在机器上运行一些测试的工作。当按下“停止构建”时,Bamboo 是否会向进程发送 Ctrl+C (SIGINT)? SIGKILL?
我的脚本使用多处理,并且在收到 SIGINT 信号时会正常关闭,但是当我按下“停止构建”时,它似乎会杀死主进程并让其余进程继续运行......
【问题讨论】:
标签: bamboo
Bamboo 中的“停止构建”按钮如何工作?我有一个调用 Python3 脚本在机器上运行一些测试的工作。当按下“停止构建”时,Bamboo 是否会向进程发送 Ctrl+C (SIGINT)? SIGKILL?
我的脚本使用多处理,并且在收到 SIGINT 信号时会正常关闭,但是当我按下“停止构建”时,它似乎会杀死主进程并让其余进程继续运行......
【问题讨论】:
标签: bamboo
根据我的 Bamboo 日志,它似乎发送了一个 SIGQUIT 信号,然后在五秒后发送了一个 SIGTERM 信号:
17:24:02 Executing kill -3 66265 # this sends SIGQUIT
17:24:07 Killing: 66265
17:24:07 Executing kill 66265 # this sends SIGTERM
通过添加这样的信号处理程序,我能够捕获它并优雅地退出我的进程:
def signal_handler(self, signum, frame):
print(f"Received a 'kill -{signum}'! Cleaning up...")
self.cleanup()
# put these inside of the main function
signal.signal(signal.SIGQUIT, self.signal_handler)
signal.signal(signal.SIGTERM, self.signal_handler)
根据this post on the Bamboo forums,Bamboo 向进程发送SIGTERM,但没有提及最先发送的SIGQUIT。
仅当您在Plan Configuration -> Other 中启用“强制停止构建”时,上述情况似乎才成立。如果未启用“强制停止构建”,则“停止构建”似乎没有任何作用。
【讨论】: