diff options
-rw-r--r-- | common.h | 2 | ||||
-rw-r--r-- | sctrace.c | 5 | ||||
-rw-r--r-- | util.c | 14 |
3 files changed, 13 insertions, 8 deletions
@@ -112,6 +112,6 @@ struct process *add_process(pid_t pid, unsigned long int trace_options); void remove_process(struct process *proc); /* util.c */ -void set_trace_output(FILE *fp); +void setup_trace_output(FILE *fp, int multiprocess); void tprintf(struct process *proc, const char *fmt, ...); _Noreturn void eprintf(const char *fmt, ...); @@ -99,7 +99,7 @@ main(int argc, char **argv) char *outfile = NULL; FILE *outfp = stderr; const char *num = NULL; - int status, exit_value = 0, trace_event, with_argv0 = 0; + int status, exit_value = 0, trace_event, with_argv0 = 0, multiprocess = 0; unsigned long int trace_options = PTRACE_O_EXITKILL | PTRACE_O_TRACESYSGOOD | PTRACE_O_TRACEEXEC; struct process *proc, *proc2; unsigned long int event; @@ -118,6 +118,7 @@ main(int argc, char **argv) case 'f': trace_options |= PTRACE_O_TRACEFORK; trace_options |= PTRACE_O_TRACEVFORK; + multiprocess = 1; break; default: usage(); @@ -184,7 +185,7 @@ main(int argc, char **argv) } have_outfp: - set_trace_output(outfp); + setup_trace_output(outfp, multiprocess); for (;;) { pid = wait(&status); @@ -5,11 +5,13 @@ static FILE *trace_fp; static char last_char = '\n'; static pid_t last_pid = 0; +static int multiproctrace; void -set_trace_output(FILE *fp) +setup_trace_output(FILE *fp, int multiprocess) { + multiproctrace = multiprocess; trace_fp = fp; } @@ -22,10 +24,12 @@ tprintf(struct process *proc, const char *fmt, ...) last_pid = 0; fmt = &fmt[1]; } - if (last_char == '\n') - fprintf(trace_fp, "[%ju] ", (uintmax_t)proc->pid); - else if (proc->pid != last_pid) - fprintf(trace_fp, "\n[%ju] ", (uintmax_t)proc->pid); + if (multiproctrace) { + if (last_char == '\n') + fprintf(trace_fp, "[%ju] ", (uintmax_t)proc->pid); + else if (proc->pid != last_pid) + fprintf(trace_fp, "\n[%ju] ", (uintmax_t)proc->pid); + } va_start(ap, fmt); vfprintf(trace_fp, fmt, ap); last_pid = proc->pid; |