diff --git a/examples/platforms/posix/platform-posix.h b/examples/platforms/posix/platform-posix.h index de7684e7c..b27a9042c 100644 --- a/examples/platforms/posix/platform-posix.h +++ b/examples/platforms/posix/platform-posix.h @@ -70,6 +70,7 @@ __forceinline void timersub(struct timeval *a, struct timeval *b, struct timeval #include #include #include +#include #include #include #include diff --git a/examples/platforms/posix/platform.c b/examples/platforms/posix/platform.c index c75caee67..1295e3b2c 100644 --- a/examples/platforms/posix/platform.c +++ b/examples/platforms/posix/platform.c @@ -57,9 +57,17 @@ uint32_t WELLKNOWN_NODE_ID = 34; extern bool gPlatformPseudoResetWasRequested; +static volatile bool gTerminate = false; + #ifndef _WIN32 int gArgumentsCount = 0; char **gArguments = NULL; + +static void handleSignal(int aSignal) +{ + (void)aSignal; + gTerminate = true; +} #endif void PlatformInit(int aArgCount, char *aArgVector[]) @@ -85,6 +93,9 @@ void PlatformInit(int aArgCount, char *aArgVector[]) gArgumentsCount = aArgCount; gArguments = aArgVector; + + signal(SIGTERM, &handleSignal); + signal(SIGHUP, &handleSignal); #endif NODE_ID = (uint32_t)strtol(aArgVector[1], &endptr, 0); @@ -149,6 +160,11 @@ void PlatformProcessDrivers(otInstance *aInstance) } } + if (gTerminate) + { + exit(0); + } + platformUartProcess(); platformRadioProcess(aInstance); platformAlarmProcess(aInstance);