src/nnn.c | 29 +++++++++-------------------- diff --git a/src/nnn.c b/src/nnn.c index 5fb992e14bb4d712752c5fceb25acc07aa0ddca3..d154406091442826511bb6b9b582b7d634094b01 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -936,15 +936,7 @@ if (!(flag & F_NOWAIT)) { /* wait for the child to exit */ do { - /* Exit if parent has exited */ - if (getppid() == 1) { - /* Kill child */ - kill(p, SIGKILL); - - /* Exit */ - _exit(0); - } - } while (waitpid(p, &status, WNOHANG) <= 0); + } while (waitpid(p, &status, 0) == -1); if (WIFEXITED(status)) { status = WEXITSTATUS(status); @@ -1008,8 +1000,6 @@ if (flag & F_NORMAL) exitcurses(); pid = xfork(flag); - - /* Child */ if (pid == 0) { if (dir && chdir(dir) == -1) _exit(1); @@ -1025,18 +1015,17 @@ } execvp(*argv, argv); _exit(1); - } + } else { + retstatus = join(pid, flag); - /* Parent */ - retstatus = join(pid, flag); + DPRINTF_D(pid); + if (flag & F_NORMAL) { + nonl(); + noecho(); + } - DPRINTF_D(pid); - if (flag & F_NORMAL) { - nonl(); - noecho(); + free(cmd); } - - free(cmd); return retstatus; }