iHandle sigchld to reap zombies immideately - thingmenu - A simple graphical menu launcher for X11. Err bitreich.org 70
hgit clone git://bitreich.org/thingmenu URL:git://bitreich.org/thingmenu bitreich.org 70
1Log /scm/thingmenu/log.gph bitreich.org 70
1Files /scm/thingmenu/files.gph bitreich.org 70
1Refs /scm/thingmenu/refs.gph bitreich.org 70
1Tags /scm/thingmenu/tag bitreich.org 70
1LICENSE /scm/thingmenu/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit f3edf619a8441c5ebc5ea4b209770bf30788c137 /scm/thingmenu/commit/f3edf619a8441c5ebc5ea4b209770bf30788c137.gph bitreich.org 70
1parent f19ef16ad6c6db0361253620088a5b37b9d0ab4d /scm/thingmenu/commit/f19ef16ad6c6db0361253620088a5b37b9d0ab4d.gph bitreich.org 70
hAuthor: Platon Ryzhikov <ihummer63@yandex.ru> URL:mailto:ihummer63@yandex.ru bitreich.org 70
iDate: Sun, 26 May 2019 17:52:29 +0300 Err bitreich.org 70
i Err bitreich.org 70
iHandle sigchld to reap zombies immideately Err bitreich.org 70
i Err bitreich.org 70
iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M thingmenu.c | 17 +++++++++++++---- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 13 insertions(+), 4 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/thingmenu.c b/thingmenu.c /scm/thingmenu/file/thingmenu.c.gph bitreich.org 70
i@@ -4,12 +4,12 @@ Err bitreich.org 70
i */ Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i #include <locale.h> Err bitreich.org 70
i+#include <signal.h> Err bitreich.org 70
i #include <stdarg.h> Err bitreich.org 70
i #include <stdio.h> Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <stdlib.h> Err bitreich.org 70
i #include <libgen.h> Err bitreich.org 70
i-#include <sys/types.h> Err bitreich.org 70
i #include <sys/wait.h> Err bitreich.org 70
i #include <X11/keysym.h> Err bitreich.org 70
i #include <X11/Xatom.h> Err bitreich.org 70
i@@ -75,6 +75,7 @@ static void leavenotify(XEvent *e); Err bitreich.org 70
i static void press(Entry *e); Err bitreich.org 70
i static void run(void); Err bitreich.org 70
i static void setup(void); Err bitreich.org 70
i+static void sigchld(int unused); Err bitreich.org 70
i static int textnw(const char *text, uint len); Err bitreich.org 70
i static void unpress(Entry *e); Err bitreich.org 70
i static void updateentries(void); Err bitreich.org 70
i@@ -423,6 +424,9 @@ setup(void) Err bitreich.org 70
i XClassHint *ch; Err bitreich.org 70
i int i, sh, sw, ls; Err bitreich.org 70
i Err bitreich.org 70
i+ /* clean up any zombies immediately */ Err bitreich.org 70
i+ sigchld(0); Err bitreich.org 70
i+ Err bitreich.org 70
i /* init screen */ Err bitreich.org 70
i screen = DefaultScreen(dpy); Err bitreich.org 70
i root = RootWindow(dpy, screen); Err bitreich.org 70
i@@ -510,6 +514,14 @@ setup(void) Err bitreich.org 70
i drawmenu(); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+void Err bitreich.org 70
i+sigchld(int unused) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ if (signal(SIGCHLD, sigchld) == SIG_ERR) Err bitreich.org 70
i+ die("can't install SIGCHLD handler:"); Err bitreich.org 70
i+ while (0 < waitpid(-1, NULL, WNOHANG)); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i int Err bitreich.org 70
i textnw(const char *text, uint len) Err bitreich.org 70
i { Err bitreich.org 70
i@@ -540,9 +552,6 @@ runentry(Entry *e) Err bitreich.org 70
i Err bitreich.org 70
i execlp(shell, basename(shell), "-c", e->cmd, (char *)NULL); Err bitreich.org 70
i break; Err bitreich.org 70
i- default: Err bitreich.org 70
i- wait(NULL); Err bitreich.org 70
i- break; Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
.
Response:
text/plain