URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9272
[ Назад ]

Исходное сообщение
"Определить процесс, от которого пришел сигнал"

Отправлено CR , 04-Ноя-11 03:10 
Есть ли способ определить pid процесса, от которого пришел сигнал?

Содержание

Сообщения в этом обсуждении
"Определить процесс, от которого пришел сигнал"
Отправлено guest , 04-Ноя-11 10:27 
Угу, есть. man sigaction про si_pid в siginfo_t



"Определить процесс, от которого пришел сигнал"
Отправлено pavlinux , 08-Ноя-11 04:35 
> Есть ли способ определить pid процесса, от которого пришел сигнал?


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

static void sghdl(int sig, siginfo_t *sgf, void *vodi __attribute__((unused))) {

    printf("PID: %d SIG: %d\n", sgf->si_pid, sig);
}

int main(void) {

    struct sigaction sa;
    int i;

    memset((void *)&sa, 0, sizeof(struct sigaction));

    sa.sa_sigaction = (void *)&sghdl;
    sa.sa_flags = SA_SIGINFO;

    for (i = 1; i < NSIG; i++) {
        if (i == SIGKILL || i == SIGSEGV || i == SIGSTOP)
            continue;
        sigaction(i, &sa, NULL);
    }

    sleep(24 * 60 * 60);
return 0;
}

В общем вся фишка в том, чтоб указать флаг SA_SIGINFO,
и у обработчика сделать три аргумента.