X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Flttng.c;h=b498539c76ea7847baafb177f23ee792f50fa901;hp=4d2df2deb999832f1d816eefc44ebb441e7ce614;hb=3ee1477aed1f58ff8cabdc4758dc2551590b4aff;hpb=92360082fd291a95695fb612d773ae1bb991c256 diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index 4d2df2deb..b498539c7 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -15,7 +15,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE #include #include @@ -25,12 +24,12 @@ #include #include #include -#include #include #include #include #include +#include #include "command.h" @@ -38,8 +37,6 @@ static char *progname; int opt_no_sessiond; char *opt_sessiond_path; -pid_t sessiond_pid; -volatile int recv_child_signal; char *opt_relayd_path; @@ -68,75 +65,32 @@ static struct option long_options[] = { /* First level command */ static struct cmd_struct commands[] = { - { "list", cmd_list}, + { "add-context", cmd_add_context}, + { "calibrate", cmd_calibrate}, { "create", cmd_create}, { "destroy", cmd_destroy}, - { "start", cmd_start}, - { "stop", cmd_stop}, - { "enable-event", cmd_enable_events}, + { "disable-channel", cmd_disable_channels}, { "disable-event", cmd_disable_events}, { "enable-channel", cmd_enable_channels}, - { "disable-channel", cmd_disable_channels}, - { "add-context", cmd_add_context}, + { "enable-event", cmd_enable_events}, + { "help", NULL}, + { "list", cmd_list}, + { "load", cmd_load}, + { "metadata", cmd_metadata}, + { "save", cmd_save}, { "set-session", cmd_set_session}, - { "version", cmd_version}, - { "calibrate", cmd_calibrate}, - { "view", cmd_view}, { "snapshot", cmd_snapshot}, - { "save", cmd_save}, - { "load", cmd_load}, + { "start", cmd_start}, + { "status", cmd_status}, + { "stop", cmd_stop}, { "track", cmd_track}, { "untrack", cmd_untrack}, + { "help", NULL}, + { "version", cmd_version}, + { "view", cmd_view}, { NULL, NULL} /* Array closure */ }; -static void usage(FILE *ofp) -{ - fprintf(ofp, "LTTng Trace Control " VERSION " - " VERSION_NAME "%s\n\n", - GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION); - fprintf(ofp, "usage: lttng [OPTIONS] []\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Options:\n"); - fprintf(ofp, " -V, --version Show version\n"); - fprintf(ofp, " -h, --help Show this help\n"); - fprintf(ofp, " --list-options Simple listing of lttng options\n"); - fprintf(ofp, " --list-commands Simple listing of lttng commands\n"); - fprintf(ofp, " -v, --verbose Increase verbosity\n"); - fprintf(ofp, " -q, --quiet Quiet mode\n"); - fprintf(ofp, " -m, --mi TYPE Machine Interface mode.\n"); - fprintf(ofp, " Type: xml\n"); - fprintf(ofp, " -g, --group NAME Unix tracing group name. (default: tracing)\n"); - fprintf(ofp, " -n, --no-sessiond Don't spawn a session daemon\n"); - fprintf(ofp, " --sessiond-path PATH Session daemon full path\n"); - fprintf(ofp, " --relayd-path PATH Relayd daemon full path\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Commands:\n"); - fprintf(ofp, " add-context Add context to event and/or channel\n"); - fprintf(ofp, " calibrate Quantify LTTng overhead\n"); - fprintf(ofp, " create Create tracing session\n"); - fprintf(ofp, " destroy Tear down tracing session\n"); - fprintf(ofp, " enable-channel Enable tracing channel\n"); - fprintf(ofp, " enable-event Enable tracing event\n"); - fprintf(ofp, " disable-channel Disable tracing channel\n"); - fprintf(ofp, " disable-event Disable tracing event\n"); - fprintf(ofp, " list List possible tracing options\n"); - fprintf(ofp, " set-session Set current session name\n"); - fprintf(ofp, " snapshot Snapshot buffers of current session name\n"); - fprintf(ofp, " start Start tracing\n"); - fprintf(ofp, " stop Stop tracing\n"); - fprintf(ofp, " version Show version information\n"); - fprintf(ofp, " view Start trace viewer\n"); - fprintf(ofp, " save Save session configuration\n"); - fprintf(ofp, " load Load session configuration\n"); - fprintf(ofp, " track Track specific system resources\n"); - fprintf(ofp, " untrack Untrack specific system resources\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Each command also has its own -h, --help option.\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "Please see the lttng(1) man page for full documentation.\n"); - fprintf(ofp, "See http://lttng.org for updates, bug reports and news.\n"); -} - static void version(FILE *ofp) { fprintf(ofp, "%s (LTTng Trace Control) " VERSION" - " VERSION_NAME "%s\n", @@ -203,26 +157,11 @@ static void clean_exit(int code) */ static void sighandler(int sig) { - int status; - switch (sig) { case SIGTERM: DBG("SIGTERM caught"); clean_exit(EXIT_FAILURE); break; - case SIGCHLD: - DBG("SIGCHLD caught"); - waitpid(sessiond_pid, &status, 0); - recv_child_signal = 1; - /* Indicate that the session daemon died */ - sessiond_pid = 0; - ERR("Session daemon died (exit status %d)", WEXITSTATUS(status)); - break; - case SIGUSR1: - /* Notify is done */ - recv_child_signal = 1; - DBG("SIGUSR1 caught"); - break; default: DBG("Unknown signal %d caught", sig); break; @@ -250,21 +189,12 @@ static int set_signal_handler(void) sa.sa_handler = sighandler; sa.sa_mask = sigset; sa.sa_flags = 0; - if ((ret = sigaction(SIGUSR1, &sa, NULL)) < 0) { - PERROR("sigaction"); - goto end; - } if ((ret = sigaction(SIGTERM, &sa, NULL)) < 0) { PERROR("sigaction"); goto end; } - if ((ret = sigaction(SIGCHLD, &sa, NULL)) < 0) { - PERROR("sigaction"); - goto end; - } - end: return ret; } @@ -288,8 +218,14 @@ static int handle_command(int argc, char **argv) goto end; } + /* Special case for help command which needs the commands array */ + if (strcmp(argv[0], "help") == 0) { + ret = cmd_help(argc, (const char**) argv, commands); + goto end; + } + cmd = &commands[i]; - while (cmd->func != NULL) { + while (cmd->name != NULL) { /* Find command */ if (strcmp(argv[0], cmd->name) == 0) { ret = cmd->func(argc, (const char**) argv); @@ -322,7 +258,6 @@ static int parse_args(int argc, char **argv) } if (argc < 2) { - usage(stderr); clean_exit(EXIT_FAILURE); } @@ -333,8 +268,12 @@ static int parse_args(int argc, char **argv) ret = 0; goto end; case 'h': - usage(stdout); - ret = 0; + ret = utils_show_man_page(1, "lttng"); + + if (ret) { + ERR("Cannot view man page lttng(1)"); + perror("exec"); + } goto end; case 'v': /* There is only 3 possible level of verbosity. (-vvv) */ @@ -381,7 +320,6 @@ static int parse_args(int argc, char **argv) ret = 0; goto end; default: - usage(stderr); ret = 1; goto error; } @@ -392,9 +330,8 @@ static int parse_args(int argc, char **argv) lttng_opt_verbose = 0; } - /* No leftovers, print usage and quit */ + /* No leftovers, quit */ if ((argc - optind) == 0) { - usage(stderr); ret = 1; goto error; } @@ -420,7 +357,7 @@ static int parse_args(int argc, char **argv) ERR("Command error"); break; case CMD_UNDEFINED: - ERR("Undefined command"); + ERR("Undefined command or invalid arguments"); break; case CMD_FATAL: ERR("Fatal error"); @@ -429,7 +366,6 @@ static int parse_args(int argc, char **argv) ERR("Unsupported command"); break; case -1: - usage(stderr); ret = 1; break; case 0: