From c56ab476b9cf41a46f823537dab0dab0c006d962 Mon Sep 17 00:00:00 2001 From: Vincent Lefevre Date: Thu, 17 Feb 2022 03:08:26 +0200 Subject: Avoid zombies after shell exit As documented in libutempter: "During execution of the privileged process spawned by these functions, SIGCHLD signal handler will be temporarily set to the default action." Thus in case a SIGCHLD has been lost, we send a SIGCHLD to oneself in order to avoid zombies: https://savannah.gnu.org/bugs/?25089 --- src/utmp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/utmp.c b/src/utmp.c index d4effeb..5377864 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -349,6 +349,16 @@ static int pututslot(slot_t slot, struct utmpx *u, char *host, Window *win) utempter_add_record(win->w_ptyfd, host); else utempter_remove_record(win->w_ptyfd); + /* + * As documented in libutempter: "During execution of + * the privileged process spawned by these functions, + * SIGCHLD signal handler will be temporarily set to + * the default action." Thus in case a SIGCHLD has + * been lost, we send a SIGCHLD to oneself in order to + * avoid zombies: https://savannah.gnu.org/bugs/?25089 + */ + kill(getpid(), SIGCHLD); + return 1; /* pray for success */ } #else -- cgit v1.2.1