key.c: fix zombie terminal processes
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmHnTUwACgkQO3+8IhRO Y5gYJQ/5AZUKJok+JSnhvVcpwd/M4atRBE16muPr8+BtosrfY4zCB7tH3DsAjIjl kylC2YyWmgUAp8bIDdatqb0M9HOeY5RMz5giQF0sP+38c+f+y/7FPt0QoSZ7iulh RHfXWYSwBU1yklkMD92lswb6Jl43ejmaCKPGyvplTB2cUniDPWNfVIkH7sW9V87C 9OX99O1QeN1tTkWSxPJDSCjamV0CKYk4zyd/mMajG829WXtGpIyiNmPFEWbHwZ/E t/zeNnPMhrTvYH0KcV21nJ/KEESeS1Oh1Ak1ngiPFdmx3/9WwFi5qEvGUyyL4N9/ J892Nv0cAnJ1K/QjdXHDeAKm/alud1AjBhR/wnmcQyrZKJAL8HxVkFNi6Q9dp1J2 JVCqxkyqV09Tt19EVgIIWuwyonmBp8D9CmJ5H/0gMhGObhcIMAdOGE9NVBNsoOh+ gl1DhTL9DLkjYTlOls3fn4r4cOKUQuJ/CnFhPXyLDPnAIj6qPir2rCbwUlMXpNIw Tbgh9EopcwXrPt/Z9wJ225KZ56QrKFPOCdXgYBUNgEc5oyTalQndM4y9yoF2ihMh GcvnC0dNSjJCjghU/gDlqDQoMsoiiEXpK0025oQDQz61jaKHvvh96oPcFSoUDWKJ R0l4yiJlJaMPiiIYNpFzy95jHoroKZiZUbviAfcwKJ600GfowQQ= =KsAa -----END PGP SIGNATURE-----
1 files changed,
21 insertions(+),
14 deletions(-)
jump to
M
key.c
→
key.c
@@ -6,6 +6,7 @@
#include <stdio.h> #include <stdlib.h> #include <signal.h> +#include <sys/wait.h> #include <X11/X.h> #include <X11/Xos.h> #include <X11/Xlib.h>@@ -782,22 +783,28 @@ #ifdef LAUNCH_KEY
else if (e->keycode == slcode && (e->state & SHORTCUTMOD) == (MODBITS)) { kbLaunch = 1; if (fork() == 0) { - close(ConnectionNumber(dpy)); - if (dpy != '\0') - putenv(dpy); - signal(SIGINT, SIG_DFL); - signal(SIGTERM, SIG_DFL); - signal(SIGHUP, SIG_DFL); - if (termprog != NULL) { - execl(shell, shell, "-c", termprog, (char*)0); - fprintf(stderr, "ryudo: exec %s", shell); - perror(" failed"); + if (fork() == 0) { + // this code doesn't seem necessary + // close(ConnectionNumber(dpy)); + // if (dpy != '\0') + // putenv(dpy); + signal(SIGINT, SIG_DFL); + signal(SIGTERM, SIG_DFL); + signal(SIGHUP, SIG_DFL); + if (termprog != NULL) { + execl(shell, shell, "-c", termprog, (char*)0); + fprintf(stderr, "ryudo: exec %s", shell); + perror(" failed"); + } + execlp("urxvt", "urxvt", (char*)0); + execlp("9term", "9term", scrolling ? "-ws" : "-w", (char*)0); + execlp("xterm", "xterm", "-ut", (char*)0); + perror("ryudo: exec urxvt/9term/xterm failed"); + exit(1); } - execlp("urxvt", "urxvt", (char*)0); - execlp("9term", "9term", scrolling ? "-ws" : "-w", (char*)0); - execlp("xterm", "xterm", "-ut", (char*)0); - perror("ryudo: exec urxvt/9term/xterm failed"); + exit(0); } + wait((int*)0); } #endif