diff options
-rw-r--r-- | extrace.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/extrace.c b/extrace.c index a00a1db..99c4aeb 100644 --- a/extrace.c +++ b/extrace.c @@ -92,6 +92,7 @@ #define CMDLINE_MAX 32768 #define CMDLINE_DB_MAX 32 pid_t parent = 1; +pid_t child; int flat = 0; int run = 0; int full_path = 0; @@ -242,10 +243,16 @@ sig2name(int sig) static void sigchld(int sig) { + int old_errno = errno; + pid_t pid; + (void)sig; - while (waitpid(-1, NULL, WNOHANG) > 0) - ; - quit = 1; + + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) + if (pid == child) + quit = 1; + + errno = old_errno; } static void @@ -386,6 +393,10 @@ handle_msg(struct cn_msg *cn_hdr) r3 = readlinkat(proc_dir_fd, "cwd", cwd, sizeof cwd); if (r3 > 0) cwd[r3] = 0; + else if (errno == EACCES) + strcpy(cwd, "EACCES"); + else + strcpy(cwd, "EUNKNOWN"); } if (!flat) @@ -588,8 +599,6 @@ usage: } if (optind != argc) { - pid_t child; - parent = getpid(); signal(SIGCHLD, sigchld); |