[OpenWrt-Devel] [PATCH] procd: show process's exit code
ondrej.votava at cvut.cz
ondrej.votava at cvut.cz
Mon Jan 20 04:53:05 EST 2020
From: Ondřej Votava <ondrej.votava at cvut.cz>
Adds feature to show process's exit code when
ubus service list is called.
Signed-off-by: Ondřej Votava <ondrej.votava at 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 at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list