caffe之路-SIGTERM信号捕捉

Posted 明也无涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caffe之路-SIGTERM信号捕捉相关的知识,希望对你有一定的参考价值。

Caffe在1.0版本仅支持两种信号的处理: 1) SIGHUP 2) SIGINT

  • SIGHUP:caffe接收到此信号后进行snapshot,并不会中断caffe的训练.
  • SIGINT:caffe接收到此信号后进行snapshot,并退出.

参考issue #2012对这个问题的讨论.在PR 2253中对这两种信号做了支持,在Solver中回调信号检查函数.

当我们使用kill PID来停止caffe进程时发送的是SIGTERM(15)信号,caffe并没有处理,将直接退出.
如果我们想让它捕捉该信号并进行snapshot,可以添加代码使其与SIGINT的处理一致.
具体方法如下:
编辑src/caffe/util/signal_handler.cpp

void handle_signal(int signal) {
    switch (signal) {
    case SIGHUP:
      got_sighup = true;
      break;
    case SIGINT:
      got_sigint = true;
      break;
    case SIGTERM:
      got_sigint = true; // 当作SIGINT
      break;
    }
}

HookupHandler 与 UnhookHandler 中注册和取消SIGTERM:
sigaction(SIGTERM, &sa, NULL)

涉及基本的C语言信号处理函数,不再赘述.

以上是关于caffe之路-SIGTERM信号捕捉的主要内容,如果未能解决你的问题,请参考以下文章

捕捉 SIGTERM 与捕捉 SIGINT

[linux] linux信号

转-Unix系统进程对SIGTERMSIGUSR1和SIGUSR2信号处理

Linux - 操作系统信号

SIGTERM等信号含义

如何优雅地处理 SIGTERM 信号?