aboutsummaryrefslogtreecommitdiffstats
path: root/src/s6/process_stop.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-06-06 13:48:20 +0000
committerLaurent Bercot <ska@appnovation.com>2025-06-06 13:48:20 +0000
commit3f75ffee7c0c7d6b70cf305d60435ac862ea9ab5 (patch)
tree45d86cdc414e6534305d2b723666c1291d74b940 /src/s6/process_stop.c
parent73988ba1cfa375582c86302116192fb8ec567f48 (diff)
downloads6-frontend-3f75ffee7c0c7d6b70cf305d60435ac862ea9ab5.tar.gz
Implement "s6 process"
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/s6/process_stop.c')
-rw-r--r--src/s6/process_stop.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/s6/process_stop.c b/src/s6/process_stop.c
new file mode 100644
index 0000000..6f11b02
--- /dev/null
+++ b/src/s6/process_stop.c
@@ -0,0 +1,38 @@
+/* ISC license. */
+
+#include <stddef.h>
+
+#include <skalibs/uint64.h>
+#include <skalibs/env.h>
+#include <skalibs/strerr.h>
+#include <skalibs/gol.h>
+
+#include "s6-internal.h"
+
+#define USAGE "s6 process stop [ -W|--nowait | -w|--wait ] services..."
+#define dieusage() strerr_dieusage(100, USAGE)
+
+enum process_stop_golb_e
+{
+ PROCESS_STOP_GOLB_WAIT,
+ PROCESS_STOP_GOLB_N
+} ;
+
+static gol_bool const process_stop_golb[2] =
+{
+ { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << PROCESS_STOP_GOLB_WAIT },
+ { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << PROCESS_STOP_GOLB_WAIT }
+} ;
+
+int process_stop (char const *const *argv)
+{
+ uint64_t golb = 1 << PROCESS_STOP_GOLB_WAIT ;
+ size_t argc ;
+ PROG = "s6 process stop" ;
+
+ argv += gol_argv(argv, process_stop_golb, 2, 0, 0, &golb, 0) ;
+ if (!argv) dieusage() ;
+ argc = env_len(argv) ;
+ process_check_services(argv, argc) ;
+ return process_send_svc(golb & 1 << PROCESS_STOP_GOLB_WAIT ? "-dwD" : "-d", argv, argc) ;
+}