Как заблокировать некоторые сигналы в потоке, созданном с использованием std :: thread? - PullRequest
0 голосов
/ 25 февраля 2019

В одной из функций-членов (доступ к которой осуществляется несколькими потоками) моего класса я создаю отдельный поток для сжатия огромного файла журнала (~ 1 ГБ).

void Log::log (std::string message)
    {
        // Lock using mutex
        std::lock_guard<std::mutex> lck(mtx);

        _outputFile << message << std::endl;
        _outputFile.flush();
        _sequence_number++;
        _curr_file_size = _outputFile.tellp();

        if (_curr_file_size >= max_size) {
            // Code to close the file stream, rename the file, and reopen
            ...


            // Create an independent thread to compress the file since
            // it takes some time to compress huge files.
            if (!_log_compression_on)
            {
                std::thread(&Log::rotate_log, this, _logfile, _max_files, _compress).detach();
            }
        }
    }

Я не хочу этогоновый поток для приема сигналов, таких как SIGTERM, SIGHUP и т. д., поскольку основной процесс уже установил обработчики для этих сигналов.

Я хочу знать, как я могу заблокировать некоторые сигналы во вновь созданном std :: thread.

void rotate_log (std::string logfile, uint32_t max_files, bool compress)
{
    // How to block some signals such as SIGTERM, SIGHUP?

    // Do other stuff.
}
...