diff options
author | turret <turret@duck.com> | 2024-01-14 19:50:24 -0600 |
---|---|---|
committer | turret <turret@duck.com> | 2024-01-14 19:50:24 -0600 |
commit | bb357be604b64d489b6015f4c7466be51a748929 (patch) | |
tree | b92fd00dd3e00e7e1fceab64613872992511433e | |
parent | 7da85e6f9b6e9a694eb2faef5c1779c83b9efe3c (diff) | |
download | discord-bot-skeleton-bb357be604b64d489b6015f4c7466be51a748929.tar.gz discord-bot-skeleton-bb357be604b64d489b6015f4c7466be51a748929.tar.bz2 discord-bot-skeleton-bb357be604b64d489b6015f4c7466be51a748929.zip |
init: modify panic termination sequence
in log: we ensure we panic by killing our process group with SIGTERM,
raising it for ourselves, and exiting (if all else fails simply).
in init: we catch SIGTERM and exit with 0 if we get it, as bash (and
likely others) prints a nasty "Terminated" to stderr
-rw-r--r-- | init/init.c | 3 | ||||
-rw-r--r-- | init/log.c | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/init/init.c b/init/init.c index ecd3c25..5387043 100644 --- a/init/init.c +++ b/init/init.c @@ -103,6 +103,7 @@ int main(void) static sigset_t set; sigaddset(&set, SIGCHLD); sigaddset(&set, SIGINT); + sigaddset(&set, SIGTERM); sigprocmask(SIG_BLOCK, &set, NULL); while(subsystem_count > 0) { @@ -119,6 +120,8 @@ int main(void) } } else if(sig == SIGINT) { panic("init: keyboard interrupt"); + } else if(sig == SIGTERM) { + exit(0); } } @@ -175,7 +175,9 @@ void _panic(const char *fileorigin, /* if we are going to die, we dont really need to clean up */ if(mode == PANICMODE_DIE) { - kill(-getpgid(pid), SIGKILL); + kill(-getpgid(pid), SIGTERM); + raise(SIGTERM); + exit(0); } print(NOLOCK("5") "------------[ cut here ]------------"); |