diff --git a/mxqd.c b/mxqd.c index e6b78f54..bff62e82 100644 --- a/mxqd.c +++ b/mxqd.c @@ -1187,6 +1187,16 @@ int user_process(struct mxq_group_list *glist, struct mxq_job *job) static const char REAPER_PNAME[] = "mxqd reaper"; +static int is_reaper(pid_t pid) { + char comm[16]; + if (mx_proc_get_comm(pid, comm) == NULL) + return 0; + if (strcmp(comm, REAPER_PNAME) == 0) + return 1; + else + return 0; +} + int reaper_process(struct mxq_server *server,struct mxq_group_list *glist, struct mxq_job *job) { pid_t pid; struct rusage rusage; @@ -2285,8 +2295,6 @@ static int lost_scan_one(struct mxq_server *server) struct mxq_job *job; - int res; - for (ulist = server->users; ulist; ulist = ulist->next) { for (glist = ulist->groups; glist; glist = glist->next) { for (jlist = glist->jobs; jlist; jlist = jlist->next) { @@ -2304,13 +2312,9 @@ static int lost_scan_one(struct mxq_server *server) continue; } - res = kill(job->host_pid, 0); - if (res >= 0) + if (is_reaper(job->host_pid)) continue; - if (errno != ESRCH) - return -errno; - if (!fspool_file_exists(server, job->job_id)) { mx_log_warning("pid %u: process is gone. setting job status of job %lu to unknown.", jlist->job.host_pid,