iFix runentry to not spawn zombies. - 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 811e5fc9b529d6efa2833e58e9a08165490f3281 /scm/thingmenu/commit/811e5fc9b529d6efa2833e58e9a08165490f3281.gph bitreich.org 70 1parent bcb369a656d09ae2c2bb76d99622afc9ba33474b /scm/thingmenu/commit/bcb369a656d09ae2c2bb76d99622afc9ba33474b.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Fri, 24 May 2019 19:30:12 +0200 Err bitreich.org 70 i Err bitreich.org 70 iFix runentry to not spawn zombies. Err bitreich.org 70 i Err bitreich.org 70 iThanks to Platon Ryzhikov for reporting! Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M thingmenu.c | 25 +++++++++++++------------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 13 insertions(+), 12 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@@ -524,21 +524,22 @@ void Err bitreich.org 70 i runentry(Entry *e) Err bitreich.org 70 i { Err bitreich.org 70 i char *shell; Err bitreich.org 70 i+ int pid; Err bitreich.org 70 i Err bitreich.org 70 i- if (fork()) { Err bitreich.org 70 i- if (oneshot || e->forceexit) { Err bitreich.org 70 i- running = False; Err bitreich.org 70 i- } Err bitreich.org 70 i- return; Err bitreich.org 70 i- } Err bitreich.org 70 i- if (fork()) Err bitreich.org 70 i- exit(0); Err bitreich.org 70 i+ if (oneshot || e->forceexit) Err bitreich.org 70 i+ running = False; Err bitreich.org 70 i Err bitreich.org 70 i- shell = getenv("SHELL"); Err bitreich.org 70 i- if (!shell) Err bitreich.org 70 i- shell = "/bin/sh"; Err bitreich.org 70 i+ switch (pid = fork()) { Err bitreich.org 70 i+ case -1: Err bitreich.org 70 i+ return; Err bitreich.org 70 i+ case 0: Err bitreich.org 70 i+ shell = getenv("SHELL"); Err bitreich.org 70 i+ if (!shell) Err bitreich.org 70 i+ shell = "/bin/sh"; Err bitreich.org 70 i Err bitreich.org 70 i- execlp(shell, basename(shell), "-c", e->cmd, (char *)NULL); 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+ } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 .