zoukankan      html  css  js  c++  java
  • 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语言信号处理函数,不再赘述.

  • 相关阅读:
    优化Hibernate所鼓励的7大措施:
    Java未赋值变量的默认初始值
    年轻代
    JVM介绍
    Java锁的种类以及辨析
    java语言复制数组的四种方法
    static和final
    抽象函数抽象类
    try catch finally
    九大内置对象
  • 原文地址:https://www.cnblogs.com/makefile/p/caffe-sigterm.html
Copyright © 2011-2022 走看看