From e708b795b5f77969f2d3001c9382be01c8205006 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 1 Dec 2018 10:28:00 -0500 Subject: [PATCH] Use sigaction in sandman --- sandman.m | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sandman.m b/sandman.m index 7d2f56a..44ab267 100644 --- a/sandman.m +++ b/sandman.m @@ -21,11 +21,11 @@ #import #import -void sigchld(int sig) { +void handler(int sig) { (void)sig; int status; pid_t pid = wait(&status); - if (pid < 0) err(EX_OSERR, "wait"); + if (pid < 0) _exit(EX_OSERR); if (WIFSIGNALED(status)) { _exit(128 + WTERMSIG(status)); } else { @@ -36,7 +36,14 @@ void sigchld(int sig) { int main(int argc, char *argv[]) { if (argc < 2) return EX_USAGE; - signal(SIGCHLD, sigchld); + sigset_t mask; + sigemptyset(&mask); + struct sigaction sa = { + .sa_handler = handler, + .sa_mask = mask, + .sa_flags = SA_RESTART, + }; + sigaction(SIGCHLD, &sa, NULL); pid_t pid = fork(); if (pid < 0) err(EX_OSERR, "fork");