J'exécute un programme Java en tant que démon sur Linux en utilisant jsvc d'Apache commons-daemon .
Le démon se bloque "aléatoirement" avec un seul message :
jsvc.exec error: Service did not exit cleanly
Voici la partie pertinente du code dans jsvc
( sur jsvc-unix.c
ligne 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;
}
Dans quel cas WIFEXITED
y WIFSIGNALED
les deux sont-elles fausses ? Est-il garanti que le processus n'a pas été tué dans ce cas (par un tueur de processus ou d'OOM Linux) ?