summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Latvala <petri.latvala@intel.com>2017-10-30 13:04:37 +0200
committerPetri Latvala <petri.latvala@intel.com>2017-10-30 13:04:37 +0200
commite468e03dbe017e22b46a6d1a799648ce79718e9d (patch)
tree98b0f395e64cd5d6ef2288d7da83976f3d27dc32
parent548cff4d89272ad95cc0f90cfc9adee44f77c477 (diff)
owatch: Catch all (standard) signalsowatch-ng
Also print which one is killing us when killed by a signal. Signed-off-by: Petri Latvala <petri.latvala@intel.com>
-rw-r--r--utils/owatch/owatch.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/utils/owatch/owatch.c b/utils/owatch/owatch.c
index aef7f5e..9eeb9f2 100644
--- a/utils/owatch/owatch.c
+++ b/utils/owatch/owatch.c
@@ -89,9 +89,9 @@ void init_wd()
/* make sure the watchdog are closed when exiting */
atexit(wd_close_atexit);
- signal(SIGTERM, wd_close);
- signal(SIGINT, wd_close);
- signal(SIGQUIT, wd_close);
+ for (i = 1; i <= 15; ++i) {
+ signal(i, wd_close);
+ }
}
int wd_settimeout(int timeout)
@@ -149,6 +149,7 @@ void wd_heartbeat()
void wd_close(int signal)
{
int i;
+ char buf[255];
for (i = 0; i < NUM_WDS; ++i) {
if (_watchdogfd[i] < 0)
@@ -160,6 +161,18 @@ void wd_close(int signal)
if (!signal)
log_msg("/dev/watchdog%d closed\n", i);
}
+
+ if (signal) {
+ strcpy(buf, "owatch: killed by signal ");
+ i = strlen(buf);
+ if (signal >= 10) {
+ buf[i++] = '0' + signal / 10;
+ }
+ buf[i++] = '0' + signal % 10;
+ buf[i++] = '\n';
+ buf[i] = '\0';
+ write(2, buf, i);
+ }
}
void wd_close_atexit()