Messages in this thread Patch in this message | | | From | Jiri Olsa <> | Subject | [PATCH 11/22] perf daemon: Add stop command | Date | Sat, 2 Jan 2021 23:04:30 +0100 |
| |
Add 'perf daemon stop' command to stop daemon process and all running sessions.
Example:
# cat ~/.perfconfig [daemon] base=/opt/perfdata
[session-cycles] run = -m 10M -e cycles --overwrite --switch-output -a
[session-sched] run = -m 20M -e sched:* --overwrite --switch-output -a
Starting the daemon:
# perf daemon start
Stopping the daemon
# perf daemon stop
Daemon is not running, nothing to connect to:
# perf daemon connect error: Connection refused
Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/builtin-daemon.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c index a7ffbecf8d14..45748bb471ec 100644 --- a/tools/perf/builtin-daemon.c +++ b/tools/perf/builtin-daemon.c @@ -524,6 +524,7 @@ static int setup_server_socket(struct daemon *daemon) enum { CMD_LIST = 0, CMD_SIGNAL = 1, + CMD_STOP = 2, CMD_MAX, }; @@ -650,6 +651,10 @@ static int handle_server_socket(struct daemon *daemon, int sock_fd) case CMD_SIGNAL: ret = cmd_session_kill(daemon, &cmd, out); break; + case CMD_STOP: + done = 1; + pr_debug("perf daemon is exciting\n"); + break; default: break; } @@ -992,6 +997,27 @@ static int __cmd_signal(struct daemon *daemon, struct option parent_options[], return send_cmd(daemon, &cmd); } +static int __cmd_stop(struct daemon *daemon, struct option parent_options[], + int argc, const char **argv) +{ + struct option start_options[] = { + OPT_PARENT(parent_options), + OPT_END() + }; + union cmd cmd = { .cmd = CMD_STOP, }; + + argc = parse_options(argc, argv, start_options, daemon_usage, 0); + if (argc) + usage_with_options(daemon_usage, start_options); + + if (setup_config(daemon)) { + pr_err("failed: config not found\n"); + return -1; + } + + return send_cmd(daemon, &cmd); +} + int cmd_daemon(int argc, const char **argv) { struct option daemon_options[] = { @@ -1015,6 +1041,8 @@ int cmd_daemon(int argc, const char **argv) if (argc) { if (!strcmp(argv[0], "signal")) return __cmd_signal(&__daemon, daemon_options, argc, argv); + else if (!strcmp(argv[0], "stop")) + return __cmd_stop(&__daemon, daemon_options, argc, argv); pr_err("failed: unknown command '%s'\n", argv[0]); return -1; -- 2.26.2
| |