init: improve log message when a process exits: show exit code
No binary (build failed)
—
(log yok)
| @@ -1198,17 +1198,29 @@ int init_main(int argc UNUSED_PARAM, char **argv) | |
| /* Wait for any child process(es) to exit */ | |
| while (1) { | |
| pid_t wpid; | |
| + | int status; |
| struct init_action *a; | |
| - | wpid = waitpid(-1, NULL, WNOHANG); |
| + | wpid = waitpid(-1, &status, WNOHANG); |
| if (wpid <= 0) | |
| break; | |
| a = mark_terminated(wpid); | |
| if (a) { | |
| - | message(L_LOG, "process '%s' (pid %u) exited. " |
| + | const char *s = "killed, signal"; |
| + | int ex = WTERMSIG(status); |
| + | /* "if (!WIFSIGNALED(status))" generates more code: |
| + | * on linux, WIFEXITED(status) is "WTERMSIG(status) == 0" |
| + | * and WTERMSIG(status) is known, so compiler optimizes. |
| + | */ |
| + | if (WIFEXITED(status)) { |
| + | s = "exited, exitcode"; |
| + | ex = WEXITSTATUS(status); |
| + | } |
| + | message(L_LOG, "process '%s' (pid %u) %s:%d. " |
| "Scheduling for restart.", | |
| - | a->command, (unsigned)wpid); |
| + | a->command, (unsigned)wpid, |
| + | s, ex); |
| } | |
| } | |