From b0094a72d4c25a84b61327c752979f413e2b08f4 Mon Sep 17 00:00:00 2001 From: James Feist Date: Tue, 26 Nov 2019 09:07:15 -0800 Subject: Provide proper exit code for signals Currently ipmid only exits 0, allow it to exit based on the signal captured. Tested: journalctl -u phosphor-pid-control -o json-pretty { "_SYSTEMD_SLICE" : "-.slice", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "MESSAGE" : "phosphor-ipmi-host.service: Main process exited, code=killed, status=9/KILL", "EXIT_STATUS" : "9", "__CURSOR" : "s=cd10fcb9010e4cfdbcdad08709c2265d;i=399;b=2efcc2f735f74bc99588861556589a72;m=7c0ed53;t=592853b62b677;x=1ae3833ab435621e", "__MONOTONIC_TIMESTAMP" : "130084179", "MESSAGE_ID" : "98e322203f7a4ed290d09fe03c09fe15", "_EXE" : "/lib/systemd/systemd", "CODE_LINE" : "5797", "UNIT" : "phosphor-ipmi-host.service", "_SYSTEMD_CGROUP" : "/init.scope", "_SYSTEMD_UNIT" : "init.scope", "SYSLOG_IDENTIFIER" : "systemd", "_COMM" : "systemd", "_UID" : "0", "PRIORITY" : "4", "_HOSTNAME" : "intel-obmc", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_FUNC" : "unit_log_process_exit", "_CMDLINE" : "/lib/systemd/systemd", "__REALTIME_TIMESTAMP" : "1568475808183927", "_SOURCE_REALTIME_TIMESTAMP" : "1568475808183827", "COMMAND" : "ExecStart", "INVOCATION_ID" : "67ff87a3ad4b4a4da3fe7e0ff083e2b8", "_TRANSPORT" : "journal", "_MACHINE_ID" : "f7182be05e2147feba2eaceaea0aded3", "_BOOT_ID" : "2efcc2f735f74bc99588861556589a72", "EXIT_CODE" : "killed", "_PID" : "1" } Change-Id: I9f3233546b43a331076d21b73beabbf2aaca9d8b Signed-off-by: James Feist --- ipmid-new.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ipmid-new.cpp b/ipmid-new.cpp index 03b6b8a..3612884 100644 --- a/ipmid-new.cpp +++ b/ipmid-new.cpp @@ -861,12 +861,14 @@ int main(int argc, char* argv[]) ipmi::nameChangeHandler); ipmi::doListNames(*io, *sdbusp); + int exitCode = 0; // set up boost::asio signal handling std::function stopAsioRunLoop = - [&io](int signalNumber) { + [&io, &exitCode](int signalNumber) { log("Received signal; quitting", entry("SIGNAL=%d", signalNumber)); io->stop(); + exitCode = signalNumber; return SignalResponse::breakExecution; }; registerSignalHandler(ipmi::prioOpenBmcBase, SIGINT, stopAsioRunLoop); @@ -882,5 +884,5 @@ int main(int argc, char* argv[]) // unload the provider libraries providers.clear(); - return 0; + std::exit(exitCode); } -- cgit v1.2.1