Я запускаю программу Java как демон в Linux, используя Apache commons-daemon's jsvc.waitpid - В каких случаях оба WIFEXITED и WIFSIGNALED будут ложными?
Демон "случайно" падает только с сообщением:
jsvc.exec error: Service did not exit cleanly
Это соответствующая часть кода в jsvc
(in jsvc-unix.c
line 1142):
while (waitpid(pid, &status, 0) != pid) {
/* Waith for process */
}
/* The child must have exited cleanly */
if (WIFEXITED(status)) {
status = WEXITSTATUS(status);
// Clean exit code...
}
else {
if (WIFSIGNALED(status)) {
log_error("Service killed by signal %d", WTERMSIG(status));
/* prevent looping */
if (laststart + 60 > time(NULL)) {
log_debug("Waiting 60 s to prevent looping");
sleep(60);
}
continue;
}
log_error("Service did not exit cleanly", status);
return 1;
}
В этом случае может WIFEXITED
и WIFSIGNALED
как быть ложным? Гарантировано, что процесс не был убит в этом случае (процессом или убийцей OOM Linux)?
Ребенок также может быть возобновлена ('WIFCONTINUED (статус)' должен затем быть установлен) –
@KarstenKoop Вы получите только, что если вы передаете WCONTINUED к waitpid, что не делается здесь – nos