diff --git a/src/librc/librc-daemon.c b/src/librc/librc-daemon.c index e98b02c..3f462bf 100644 --- a/src/librc/librc-daemon.c +++ b/src/librc/librc-daemon.c @@ -90,6 +90,10 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid) { DIR *procdir; struct dirent *entry; + FILE *fp; + bool host_process = true; + char *line = NULL; + size_t len = 0; pid_t p; char buffer[PATH_MAX]; struct stat sb; @@ -134,6 +138,21 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid) if (argv && !pid_is_argv(p, (const char *const *)argv)) continue; + snprintf(buffer, sizeof(buffer), "/proc/%d/status", p); + if (exists(buffer)) { + fp = fopen(buffer, "r"); + if (! fp) + continue; + while (! feof(fp) && host_process) { + rc_getline(fp, &line, &len); + if (strncmp(line, "envID:", 6) == 0) + host_process = (strncmp(line, "envID:\t0", 8) == 0); + } + free(line); + fclose(fp); + } + if (! host_process) + continue; if (!pids) { pids = xmalloc(sizeof(*pids)); LIST_INIT(pids);