init: improve log message when a process exits: show exit code

function                                             old     new   delta
.rodata                                           105649  105680     +31
init_main                                            776     804     +28
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 59/0)               Total: 59 bytes

Signed-off-by: Sébastien Parisot <sparisot@free-mobile.fr>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Sébastien Parisot 2025-04-02 17:43:54 +02:00 committed by Denys Vlasenko
parent 887295686d
commit f9274e8d6e

View file

@ -1198,17 +1198,29 @@ int init_main(int argc UNUSED_PARAM, char **argv)
/* Wait for any child process(es) to exit */ /* Wait for any child process(es) to exit */
while (1) { while (1) {
pid_t wpid; pid_t wpid;
int status;
struct init_action *a; struct init_action *a;
wpid = waitpid(-1, NULL, WNOHANG); wpid = waitpid(-1, &status, WNOHANG);
if (wpid <= 0) if (wpid <= 0)
break; break;
a = mark_terminated(wpid); a = mark_terminated(wpid);
if (a) { 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.", "Scheduling for restart.",
a->command, (unsigned)wpid); a->command, (unsigned)wpid,
s, ex);
} }
} }