From: Ondřej Votava <ondrej.vot...@cvut.cz> Adds feature to show process's exit code when ubus service list is called.
Signed-off-by: Ondřej Votava <ondrej.vot...@cvut.cz> --- service/instance.c | 12 ++++++++++++ service/instance.h | 1 + 2 files changed, 13 insertions(+) diff --git a/service/instance.c b/service/instance.c index abd1f34..c360343 100644 --- a/service/instance.c +++ b/service/instance.c @@ -574,6 +574,15 @@ instance_exit(struct uloop_process *p, int ret) DEBUG(2, "Instance %s::%s exit with error code %d after %ld seconds\n", in->srv->name, in->name, ret, runtime); + /* + According to man waitpid(2) exit codes might be: + 0 -- everything is OK + SIGNALLED -- 1 - 64 - and since we want the same behavior as SHELL, we add 128 + @see http://tldp.org/LDP/abs/html/exitcodes.html + 256 - 65536 -- regular exit, strip the bottom byte with WEXITSTATUS macro. + @see man waitpid(2) + */ + in->exit_code = WIFEXITED(ret) ? WEXITSTATUS(ret) : WIFSIGNALED(ret) ? 128 + WTERMSIG(ret) : 1; uloop_timeout_cancel(&in->timeout); service_event("instance.stop", in->srv->name, in->name); @@ -1091,6 +1100,7 @@ instance_init(struct service_instance *in, struct service *s, struct blob_attr * in->proc.cb = instance_exit; in->term_timeout = 5; in->syslog_facility = LOG_DAEMON; + in->exit_code = 0; in->_stdout.fd.fd = -2; in->_stdout.stream.string_data = true; @@ -1124,6 +1134,8 @@ void instance_dump(struct blob_buf *b, struct service_instance *in, int verbose) if (in->command) blobmsg_add_blob(b, in->command); blobmsg_add_u32(b, "term_timeout", in->term_timeout); + if (!in->proc.pending) + blobmsg_add_u32(b, "exit_code", in->exit_code); if (!avl_is_empty(&in->errors.avl)) { struct blobmsg_list_node *var; diff --git a/service/instance.h b/service/instance.h index 42cc4be..05a2fc3 100644 --- a/service/instance.h +++ b/service/instance.h @@ -62,6 +62,7 @@ struct service_instance { char *seccomp; char *pidfile; int syslog_facility; + int exit_code; uint32_t term_timeout; uint32_t respawn_timeout; -- 2.21.0 (Apple Git-122.2) _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel