sigaction(SIGTERM, &sa_shutdown, NULL);
sigaction(SIGUSR1, &sa_shutdown, NULL);
sigaction(SIGUSR2, &sa_shutdown, NULL);
+ sigaction(SIGPWR, &sa_shutdown, NULL);
early();
cmdline();
patch_stdio("/dev/null");
execvp(kmod[0], kmod);
- ERROR("Failed to start kmodloader\n");
- exit(-1);
+ ERROR("Failed to start kmodloader: %m\n");
+ exit(EXIT_FAILURE);
}
if (pid <= 0) {
- ERROR("Failed to start kmodloader instance\n");
+ ERROR("Failed to start kmodloader instance: %m\n");
} else {
+ const struct timespec req = {0, 10 * 1000 * 1000};
int i;
for (i = 0; i < 1200; i++) {
if (waitpid(pid, NULL, WNOHANG) > 0)
break;
- usleep(10 * 1000);
+ nanosleep(&req, NULL);
watchdog_ping();
}
}