blob: 3fa192328b9f6a1e0e8e3b7abd33191af733a136 [file] [log] [blame]
/**
* Copyright (c) 2016-present, Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#if defined(__APPLE__)
#define CAFFE2_SUPPORTS_SIGNAL_HANDLER
#elif defined(__linux__)
#define CAFFE2_SUPPORTS_FATAL_SIGNAL_HANDLERS
#define CAFFE2_SUPPORTS_SIGNAL_HANDLER
#endif
namespace caffe2 {
class SignalHandler {
public:
enum class Action {
NONE,
STOP
};
// Contructor. Specify what action to take when a signal is received.
SignalHandler(Action SIGINT_action,
Action SIGHUP_action);
~SignalHandler();
Action CheckForSignals();
private:
bool GotSIGINT();
bool GotSIGHUP();
Action SIGINT_action_;
Action SIGHUP_action_;
unsigned long my_sigint_count_;
unsigned long my_sighup_count_;
};
#if defined(CAFFE2_SUPPORTS_FATAL_SIGNAL_HANDLERS)
// This works by setting up certain fatal signal handlers. Previous fatal
// signal handlers will still be called when the signal is raised. Defaults
// to being off.
void setPrintStackTracesOnFatalSignal(bool print);
bool printStackTracesOnFatalSignal();
#endif // defined(CAFFE2_SUPPORTS_SIGNAL_HANDLER)
} // namespace caffe2