remsim-client: Avoid zombies when scripts terminate
This avoids the OS from keeping terminated children (scripts) around
as zombies.
Change-Id: If7d45bda160987a26c7b101db6152142dc432fe7
diff --git a/src/client/remsim_client_main.c b/src/client/remsim_client_main.c
index bc916b9..bbc2990 100644
--- a/src/client/remsim_client_main.c
+++ b/src/client/remsim_client_main.c
@@ -1,4 +1,5 @@
+#include <errno.h>
#include <signal.h>
#include <unistd.h>
#define _GNU_SOURCE
@@ -142,6 +143,19 @@
}
}
+
+static int avoid_zombies(void)
+{
+ static struct sigaction sa_chld;
+
+ sa_chld.sa_handler = SIG_IGN;
+ sigemptyset(&sa_chld.sa_mask);
+ sa_chld.sa_flags = SA_NOCLDWAIT;
+ sa_chld.sa_restorer = NULL;
+
+ return sigaction(SIGCHLD, &sa_chld, NULL);
+}
+
int main(int argc, char **argv)
{
struct bankd_client *g_client;
@@ -166,6 +180,12 @@
signal(SIGUSR1, handle_sig_usr1);
+ /* Silently (and portably) reap children. */
+ if (avoid_zombies() < 0) {
+ fprintf(stderr, "Unable to silently reap children: %s\n", strerror(errno));
+ exit(1);
+ }
+
asn_debug = 0;
client_user_main(g_client);