#include <sys/wait.h>
#include <poll.h>
#include <sys/stat.h>
+#include <time.h>
#include "builtin.h"
#include "perf.h"
#include "debug.h"
int pid;
struct list_head list;
enum daemon_session_state state;
+ time_t start;
};
struct daemon {
FILE *out;
char perf[PATH_MAX];
int signal_fd;
+ time_t start;
};
static struct daemon __daemon = {
return -1;
}
+ session->start = time(NULL);
+
session->pid = fork();
if (session->pid < 0)
return -1;
{
char csv_sep = cmd->list.csv_sep;
struct daemon_session *session;
+ time_t curr = time(NULL);
if (csv_sep) {
fprintf(out, "%d%c%s%c%s%c%s/%s",
/* lock */
csv_sep, daemon->base, "lock");
+ fprintf(out, "%c%lu",
+ /* session up time */
+ csv_sep, (curr - daemon->start) / 60);
+
fprintf(out, "\n");
} else {
fprintf(out, "[%d:daemon] base: %s\n", getpid(), daemon->base);
daemon->base, SESSION_OUTPUT);
fprintf(out, " lock: %s/lock\n",
daemon->base);
+ fprintf(out, " up: %lu minutes\n",
+ (curr - daemon->start) / 60);
}
}
/* session ack */
csv_sep, session->base, SESSION_ACK);
+ fprintf(out, "%c%lu",
+ /* session up time */
+ csv_sep, (curr - session->start) / 60);
+
fprintf(out, "\n");
} else {
fprintf(out, "[%d:%s] perf record %s\n",
session->base, SESSION_CONTROL);
fprintf(out, " ack: %s/%s\n",
session->base, SESSION_ACK);
+ fprintf(out, " up: %lu minutes\n",
+ (curr - session->start) / 60);
}
}
if (argc)
usage_with_options(daemon_usage, start_options);
+ daemon->start = time(NULL);
+
if (setup_config(daemon)) {
pr_err("failed: config not found\n");
return -1;