X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=udev.c;h=1d66410b6c0085ba1c9c780497fb4f8f94b98bc1;hb=d12ecb53cf8c5955135b94e4b671ad28dfb3a7b4;hp=71c5f1fba538f33043495d231650722db7992e09;hpb=8ed89229bc8afed84ad6d587a6df29329bbbf440;p=elogind.git diff --git a/udev.c b/udev.c index 71c5f1fba..1d66410b6 100644 --- a/udev.c +++ b/udev.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "udev.h" #include "udev_version.h" @@ -40,6 +41,22 @@ char **main_argv; char **main_envp; +static void sig_handler(int signum) +{ + dbg("caught signal %d", signum); + switch (signum) { + case SIGINT: + case SIGTERM: + case SIGKILL: + sysbus_disconnect(); + udevdb_exit(); + exit(20 + signum); + break; + default: + dbg("unhandled signal"); + } +} + static inline char *get_action(void) { char *action; @@ -70,7 +87,11 @@ int main(int argc, char **argv, char **envp) char *devpath; char *subsystem; int retval = -EINVAL; - + + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + signal(SIGKILL, sig_handler); + main_argv = argv; main_envp = envp;