#include <unistd.h>
#include <regex.h>
#include <sys/types.h>
+#include <sys/wait.h>
#include <errno.h>
#include "lxc.h"
printf("'%s' changed state to [%s]\n",
msg.name, lxc_state2str(msg.value));
break;
+ case lxc_msg_exit_code:
+ printf("'%s' exited with status [%d]\n",
+ msg.name, WEXITSTATUS(msg.value));
+ break;
default:
/* ignore garbage */
break;
lxc_monitor_fifo_send(&msg, lxcpath);
}
+void lxc_monitor_send_exit_code(const char *name, int exit_code, const char *lxcpath)
+{
+ struct lxc_msg msg = { .type = lxc_msg_exit_code,
+ .value = exit_code };
+ strncpy(msg.name, name, sizeof(msg.name));
+ msg.name[sizeof(msg.name) - 1] = 0;
+
+ lxc_monitor_fifo_send(&msg, lxcpath);
+}
+
/* routines used by monitor subscribers (lxc-monitor) */
int lxc_monitor_close(int fd)
typedef enum {
lxc_msg_state,
lxc_msg_priority,
+ lxc_msg_exit_code,
} lxc_msg_type_t;
struct lxc_msg {
size_t fifo_path_sz, int do_mkdirp);
extern void lxc_monitor_send_state(const char *name, lxc_state_t state,
const char *lxcpath);
+extern void lxc_monitor_send_exit_code(const char *name, int exit_code,
+ const char *lxcpath);
extern int lxc_monitord_spawn(const char *lxcpath);
#endif
handler->pinfd = -1;
}
+ lxc_monitor_send_exit_code(name, status, handler->lxcpath);
err = lxc_error_set_and_log(handler->pid, status);
out_fini:
lxc_delete_network(handler);