X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=service.c;h=c914ecace571ea7c7d00a7a49783487831fb0e81;hp=74d03dbe1d4c26693b7db0ddc4049b08386e7cc1;hb=8e471ccd1583371cab19a6263b8952b37d069b07;hpb=a90ebccc072efa17313fe68c737b3507247c37dd diff --git a/service.c b/service.c index 74d03dbe1..c914ecace 100644 --- a/service.c +++ b/service.c @@ -768,6 +768,16 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) { prefix, kill_mode_to_string(s->kill_mode), prefix, service_type_to_string(s->type)); + if (s->control_pid > 0) + fprintf(f, + "%sControl PID: %llu\n", + prefix, (unsigned long long) s->control_pid); + + if (s->main_pid > 0) + fprintf(f, + "%sMain PID: %llu\n", + prefix, (unsigned long long) s->main_pid); + if (s->pid_file) fprintf(f, "%sPIDFile: %s\n", @@ -829,7 +839,17 @@ static int service_load_pid_file(Service *s) { if ((unsigned long) (pid_t) p != p) return -ERANGE; - s->main_pid = p; + if (kill((pid_t) p, 0) < 0 && errno != EPERM) { + log_warning("PID %llu read from file %s does not exist. Your service or init script might be broken.", + (unsigned long long) p, s->pid_file); + return -ESRCH; + } + + if ((r = unit_watch_pid(UNIT(s), (pid_t) p)) < 0) + /* FIXME: we need to do something here */ + return r; + + s->main_pid = (pid_t) p; s->main_pid_known = true; return 0;