Как установить сигнальный процессор SIGUSR1 и SIGUSR2?

Для этого можно использовать Nginx :сначала нужно настроить и восходящий поток:

upstream web {
  server serviceserver1.com
  server serviceserver2.com
  server serviceserver3.com
}

Тогда вам нужны:proxy_next_upstreamи proxy_connect_timeout.

Попробуйте это:

location / {
        proxy_pass              $scheme://web;
        proxy_redirect          off;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For 
        $proxy_add_x_forwarded_for;
}
0
07.11.2019, 05:10
1 ответ

Существует несколько точек доступа для настройки обработчиков сигналов, я проиллюстрирую одну из них:

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

static void signal_handler(int signo)
{
#       define signal_message "Signal received\n"
        write(1, signal_message, strlen(signal_message));
#       undef signal_message
}

int main(void)
{
        struct sigaction new_handler = {
               .sa_handler = signal_handler,
        };

        if (sigaction(SIGUSR1, &new_handler, NULL) < 0) {
                perror("sigaction");
        }

        pause();

        return 0;
}

Функция sigaction()может устанавливать новые обработчики сигналов, ее сигнатура:

int sigaction(int signum,
              const struct sigaction *act,
              struct sigaction *oldact);

Первый параметр — это номер сигнала (, например, SIGUSR1, второй параметр — это указатель на структуру struct sigactionс подробностями обработки, третий — указатель на struct sigaction, в которую он будет сохранить старые значения обработчика. Третий параметр может быть NULL, если вас не волнует старое значение.

Одним из полей struct sigactionявляется sa_handler--, это указатель на функцию обработки сигнала. Сигнатура этой функции должна быть:

void function_name(int signo);

Функция возвращает voidи принимает номер полученного сигнала в качестве параметра.

Собрав все вместе, пример устанавливает обработчик сигнала для SIGUSR, затем вызывает pause(), который приостанавливает выполнение до тех пор, пока не будет получен какой-либо сигнал. Если я затем передам сигнал SIGUSRпроцессу, выполняющему этот код, он выведет Signal receivedна стандартный вывод.

1
28.01.2020, 02:39

Теги

Похожие вопросы