From 8c5cc551ed02fbf4b67488c58e7462ad2538afb6 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sat, 25 Jun 2016 14:21:35 -0500 Subject: new Android toys: start/stop --- toys/android/start.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 toys/android/start.c (limited to 'toys/android') diff --git a/toys/android/start.c b/toys/android/start.c new file mode 100644 index 00000000..8981b679 --- /dev/null +++ b/toys/android/start.c @@ -0,0 +1,68 @@ +/* start.c - Start/stop system services. + * + * Copyright 2016 The Android Open Source Project + +USE_START(NEWTOY(start, "", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_STOP(NEWTOY(stop, "", TOYFLAG_USR|TOYFLAG_SBIN)) + +config START + bool "start" + depends on TOYBOX_ON_ANDROID + default y + help + usage: start [SERVICE...] + + Starts the given system service, or netd/surfaceflinger/zygotes. + +config STOP + bool "stop" + depends on TOYBOX_ON_ANDROID + default y + help + usage: stop [SERVICE...] + + Stop the given system service, or netd/surfaceflinger/zygotes. +*/ + +#define FOR_start +#include "toys.h" + +#include + +static const char *services[] = { + "netd", "surfaceflinger", "zygote", "zygote_secondary", NULL, +}; + +static void start_stop(int start) +{ + const char* property = start ? "ctl.start" : "ctl.stop"; + int i; + + if (getuid() != 0) error_exit("must be root"); + + if (*toys.optargs) { + for (i = 0; toys.optargs[i]; i++) property_set(property, toys.optargs[i]); + } else if (start) { + for (i = 0; i < ARRAY_LEN(services); ++i) { + property_set(property, services[i]); + } + } else { + for (i = ARRAY_LEN(services) - 1; i >= 0; --i) { + property_set(property, services[i]); + } + } +} + +void start_main(void) +{ + start_stop(1); +} + +#define CLEANUP_start +#define FOR_stop +#include "generated/flags.h" + +void stop_main(void) +{ + start_stop(0); +} -- cgit v1.2.3