The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Определить процесс, от которого пришел сигнал"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Определить процесс, от которого пришел сигнал"  +/
Сообщение от CR on 04-Ноя-11, 03:10 
Есть ли способ определить pid процесса, от которого пришел сигнал?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Определить процесс, от которого пришел сигнал"  +/
Сообщение от guest email(??) on 04-Ноя-11, 10:27 
Угу, есть. man sigaction про si_pid в siginfo_t


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Определить процесс, от которого пришел сигнал"  +/
Сообщение от pavlinux (ok) on 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,
и у обработчика сделать три аргумента.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру