Отправка информации с помощью сигнала в Linux - PullRequest
3 голосов
/ 01 сентября 2011

При отправке сигнала от одного процесса другому я также хочу отправить значение типа long .Это возможно?Я использую SIGUSR1.

1 Ответ

8 голосов
/ 01 сентября 2011

Конечно, вы можете, но вам придется отправить его с sigqueue(2) вместо kill(2). И вы можете отправить int или sival_ptr.

union sigval {
    int   sival_int;
    void *sival_ptr;
};

Установить обработчик

struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO; /* Important. */

sigaction(SIGUSR1, &sa, NULL);

Обработчик для сигнала, установленного с использованием SA_SIGINFO

static void
handler(int sig, siginfo_t *si, void *ucontext)
{
    si->si_value; /* This is what you're looking for. */
}

Отправка целого числа

union sigval sv;
sv.sival_int = 42;

sigqueue(pid, SIGUSR1, sv);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...