summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-07-25 15:40:19 -0400
committerIan Moffett <ian@osmora.org>2025-07-25 15:40:19 -0400
commit87f45183e415368e3a3e67c7a632269a0375cedc (patch)
tree634b3d9b89a3c4ff72ee758511eb282efafcbd70 /sys
parent71cb1ceaaa894f642e2d294684d6ac83e965137a (diff)
kernel: signal: Add SIGTERM
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys')
-rw-r--r--sys/include/sys/signal.h2
-rw-r--r--sys/kern/kern_sig.c6
-rw-r--r--sys/kern/kern_stub.c12
3 files changed, 20 insertions, 0 deletions
diff --git a/sys/include/sys/signal.h b/sys/include/sys/signal.h
index 9fc767d..eaf2d41 100644
--- a/sys/include/sys/signal.h
+++ b/sys/include/sys/signal.h
@@ -37,6 +37,7 @@
#define SIGFPE 8 /* Floating point exception */
#define SIGKILL 9 /* Kill */
#define SIGSEGV 11 /* Segmentation violation */
+#define SIGTERM 15 /* Terminate gracefully */
typedef uint32_t sigset_t;
@@ -80,5 +81,6 @@ int sigismember(const sigset_t *set, int signo);
void sigfpe_default(int signo);
void sigkill_default(int signo);
void sigsegv_default(int signo);
+void sigterm_default(int signo);
#endif /* _KERNEL */
#endif /* !_SYS_SIGNAL_H_ */
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 58bd52d..044de7b 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -58,6 +58,12 @@ static struct sigaction sa_tab[] = {
.sa_flags = 0,
.sa_sigaction = NULL
},
+ [SIGTERM] = {
+ .sa_handler = sigterm_default,
+ .sa_mask = 0,
+ .sa_flags = 0,
+ .sa_sigaction = NULL
+ }
};
/*
diff --git a/sys/kern/kern_stub.c b/sys/kern/kern_stub.c
index 17c6e54..a9a56ac 100644
--- a/sys/kern/kern_stub.c
+++ b/sys/kern/kern_stub.c
@@ -70,6 +70,18 @@ sigsegv_default(int signo)
exit1(td, 0);
}
+void
+sigterm_default(int signo)
+{
+ static struct proc *td;
+
+ td = this_td();
+ syslog_silence(false);
+ kprintf(OMIT_TIMESTAMP "Terminated (pid=%d)\n", td->pid);
+ syslog_silence(true);
+ exit1(td, 0);
+}
+
int
dev_noread(void)
{