I'm having trouble using kevent(2) to catch signals. Below is a sample program. It should catch SIGHUP and SIGUSR1 and just print it out. Instead when i send the process sighup with `kill -SIGHUP $PID` it exits and the word Hangup is writtin to the terminal. If I use `kill -SIGUSR1 $PID` the process exits and the words User defined signal 1 are written to the terminal. What am I doing wrong?
Thanks! Edgar
#include <sys/types.h> #include <sys/event.h> #include <sys/time.h> #include <err.h> #include <signal.h> #include <stdio.h> int main(int argc, char** argv) { int kq; struct kevent ev[2]; if ((kq = kqueue()) == -1) err(1, "kqueue()"); EV_SET(&ev[0], SIGHUP, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL); EV_SET(&ev[1], SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL); if ((kevent(kq, ev, 2, NULL, 0, NULL)) == -1) err(1, "kevent()"); for (;;) { struct kevent kev[2]; int ret; int i; ret = kevent(kq, NULL, 0, kev, 2, NULL); if (ret == -1) err(1, "kevent()"); else if (ret > 0) { for (i = 0; i < ret; i++) { struct kevent* k = &kev[i]; switch (k->filter) { case EVFILT_SIGNAL: if (k->ident == SIGHUP) printf("received sighup\n"); else if (k->ident == SIGUSR1) printf("received sigusr1\n"); break; default: printf("received unknown event\n"); break; } } } } return 0; }