- int ret = 0;
- pid_t pid;
-
- MSG("Spawning a session daemon");
- recv_child_signal = 0;
- pid = fork();
- if (pid == 0) {
- /*
- * Spawn session daemon and tell
- * it to signal us when ready.
- */
- execlp(pathname, "lttng-sessiond", "--sig-parent", "--quiet", NULL);
- /* execlp only returns if error happened */
- if (errno == ENOENT) {
- ERR("No session daemon found. Use --sessiond-path.");
- } else {
- perror("execlp");
- }
- kill(getppid(), SIGTERM); /* wake parent */
- exit(EXIT_FAILURE);
- } else if (pid > 0) {
- sessiond_pid = pid;
- /*
- * Wait for lttng-sessiond to start. We need to use a flag to check if
- * the signal has been sent to us, because the child can be scheduled
- * before the parent, and thus send the signal before this check. In
- * the signal handler, we set the recv_child_signal flag, so anytime we
- * check it after the fork is fine. Note that sleep() is interrupted
- * before the 1 second delay as soon as the signal is received, so it
- * will not cause visible delay for the user.
- */
- while (!recv_child_signal) {
- sleep(1);
- }
- /*
- * The signal handler will nullify sessiond_pid on SIGCHLD
- */
- if (!sessiond_pid) {
- exit(EXIT_FAILURE);
- }
- goto end;
- } else {
- perror("fork");
- ret = -1;
- goto end;
- }
-
-end:
- return ret;
-}
-
-/*
- * check_sessiond
- *
- * Check if the session daemon is available using
- * the liblttngctl API for the check. If not, try to
- * spawn a daemon.
- */
-static int check_sessiond(void)
-{
- int ret;
- char *pathname = NULL, *alloc_pathname = NULL;
-
- ret = lttng_session_daemon_alive();
- if (ret == 0) { /* not alive */
- /* Try command line option path */
- if (opt_sessiond_path != NULL) {
- ret = access(opt_sessiond_path, F_OK | X_OK);
- if (ret < 0) {
- ERR("No such file or access denied: %s", opt_sessiond_path);
- goto end;
- }
- pathname = opt_sessiond_path;
- } else {
- /* Try LTTNG_SESSIOND_PATH env variable */
- pathname = getenv(DEFAULT_SESSIOND_PATH_ENV);
- }
-
- /* Let's rock and roll */
- if (pathname == NULL) {
- ret = asprintf(&alloc_pathname, INSTALL_BIN_PATH "/lttng-sessiond");
- if (ret < 0) {
- perror("asprintf spawn sessiond");
- goto end;
- }
- pathname = alloc_pathname;
- }
-
- ret = spawn_sessiond(pathname);
- free(alloc_pathname);
- if (ret < 0) {
- ERR("Problem occurred when starting %s", pathname);
- goto end;
- }
- }
-
-end:
- return ret;
-}
-
-/*
- * Check args for specific options that *must* not trigger a session daemon
- * execution.
- *
- * Return 1 if match else 0.
- */
-static int check_args_no_sessiond(int argc, char **argv)
-{
- int i;
-
- for (i = 0; i < argc; i++) {
- if ((strncmp(argv[i], "-h", sizeof("-h")) == 0) ||
- strncmp(argv[i], "--h", sizeof("--h")) == 0 ||
- strncmp(argv[i], "--list-options", sizeof("--list-options")) == 0 ||
- strncmp(argv[i], "--list-commands", sizeof("--list-commands")) == 0) {
- return 1;
- }
- }
-
- return 0;
+ puts("Usage: lttng [--group=GROUP] [--mi=TYPE] [--no-sessiond | --sessiond-path=PATH]");
+ puts(" [--quiet | -v | -vv | -vvv] COMMAND [COMMAND OPTIONS]");
+ puts("");
+ puts("Available commands:");
+ puts("");
+ puts("Tracing sessions:");
+ puts(" create " CONFIG_CMD_DESCR_CREATE);
+ puts(" destroy " CONFIG_CMD_DESCR_DESTROY);
+ puts(" load " CONFIG_CMD_DESCR_LOAD);
+ puts(" metadata " CONFIG_CMD_DESCR_METADATA);
+ puts(" save " CONFIG_CMD_DESCR_SAVE);
+ puts(" set-session " CONFIG_CMD_DESCR_SET_SESSION);
+ puts("");
+ puts("Channels:");
+ puts(" add-context " CONFIG_CMD_DESCR_ADD_CONTEXT);
+ puts(" disable-channel " CONFIG_CMD_DESCR_DISABLE_CHANNEL);
+ puts(" enable-channel " CONFIG_CMD_DESCR_ENABLE_CHANNEL);
+ puts("");
+ puts("Event rules:");
+ puts(" disable-event " CONFIG_CMD_DESCR_DISABLE_EVENT);
+ puts(" enable-event " CONFIG_CMD_DESCR_ENABLE_EVENT);
+ puts("");
+ puts("Status:");
+ puts(" list " CONFIG_CMD_DESCR_LIST);
+ puts(" status " CONFIG_CMD_DESCR_STATUS);
+ puts("");
+ puts("Control:");
+ puts(" snapshot " CONFIG_CMD_DESCR_SNAPSHOT);
+ puts(" start " CONFIG_CMD_DESCR_START);
+ puts(" stop " CONFIG_CMD_DESCR_STOP);
+ puts("");
+ puts("Resource tracking:");
+ puts(" track " CONFIG_CMD_DESCR_TRACK);
+ puts(" untrack " CONFIG_CMD_DESCR_UNTRACK);
+ puts("");
+ puts("Miscellaneous:");
+ puts(" calibrate " CONFIG_CMD_DESCR_CALIBRATE);
+ puts(" help " CONFIG_CMD_DESCR_HELP);
+ puts(" version " CONFIG_CMD_DESCR_VERSION);
+ puts(" view " CONFIG_CMD_DESCR_VIEW);
+ puts("");
+ puts("Run `lttng help COMMAND` or `lttng COMMAND --help` to get help with");
+ puts("command COMMAND.");
+ puts("");
+ puts("See `man lttng` for more help with the lttng command.");