[PATCH v2] Allow -q to be repeated for very quiet output
Daniel P. Berrange
berrange at redhat.com
Mon May 13 10:30:55 UTC 2013
From: "Daniel P. Berrange" <berrange at redhat.com>
Even with the -q flag specified, tracing output is still mixed
with messages about signals and process exit status, which is
often irrelevant. Allow the -q flag to be repeated to force
the suppression of signals / exit status info too.
* defs.h: Change 'qflag' from 'bool' to 'unsigned int'
* strace.1: Document ability to repeat '-q' arg
* strace.c: Allow '-q' to be repeated to quieten process
exit status and signal messages.
Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
defs.h | 2 +-
strace.1 | 4 ++++
strace.c | 31 +++++++++++++++++--------------
3 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/defs.h b/defs.h
index 291b8fb..58cdf99 100644
--- a/defs.h
+++ b/defs.h
@@ -539,7 +539,7 @@ typedef enum {
extern cflag_t cflag;
extern bool debug_flag;
extern bool Tflag;
-extern bool qflag;
+extern unsigned int qflag;
extern bool not_failing_only;
extern bool show_fd_path;
/* are we filtering traces based on paths? */
diff --git a/strace.1 b/strace.1
index 00ca03c..9d628a1 100644
--- a/strace.1
+++ b/strace.1
@@ -267,6 +267,10 @@ Suppress messages about attaching, detaching etc. This happens
automatically when output is redirected to a file and the command
is run directly instead of attaching.
.TP
+.B \-qq
+If given twice, suppress messages about process exit status and
+signals received.
+.TP
.B \-r
Print a relative timestamp upon entry to each system call. This
records the time difference between the beginning of successive
diff --git a/strace.c b/strace.c
index 4cd5835..f6f6e89 100644
--- a/strace.c
+++ b/strace.c
@@ -74,7 +74,7 @@ unsigned int xflag = 0;
bool need_fork_exec_workarounds = 0;
bool debug_flag = 0;
bool Tflag = 0;
-bool qflag = 0;
+unsigned int qflag = 0;
/* Which WSTOPSIG(status) value marks syscall traps? */
static unsigned int syscall_trap_sig = SIGTRAP;
static unsigned int tflag = 0;
@@ -1609,7 +1609,7 @@ init(int argc, char *argv[])
iflag = 1;
break;
case 'q':
- qflag = 1;
+ qflag++;
break;
case 'r':
rflag = 1;
@@ -2112,7 +2112,8 @@ trace(void)
if (WIFEXITED(status)) {
if (pid == strace_child)
exit_code = WEXITSTATUS(status);
- if (cflag != CFLAG_ONLY_STATS) {
+ if (cflag != CFLAG_ONLY_STATS &&
+ qflag < 2) {
printleader(tcp);
tprintf("+++ exited with %d +++\n", WEXITSTATUS(status));
line_ended();
@@ -2221,17 +2222,19 @@ trace(void)
# define PC_FORMAT_STR ""
# define PC_FORMAT_ARG /* nothing */
#endif
- printleader(tcp);
- if (!stopped) {
- tprintf("--- %s ", signame(sig));
- printsiginfo(&si, verbose(tcp));
- tprintf(PC_FORMAT_STR " ---\n"
- PC_FORMAT_ARG);
- } else
- tprintf("--- stopped by %s" PC_FORMAT_STR " ---\n",
- signame(sig)
- PC_FORMAT_ARG);
- line_ended();
+ if (qflag < 2) {
+ printleader(tcp);
+ if (!stopped) {
+ tprintf("--- %s ", signame(sig));
+ printsiginfo(&si, verbose(tcp));
+ tprintf(PC_FORMAT_STR " ---\n"
+ PC_FORMAT_ARG);
+ } else
+ tprintf("--- stopped by %s" PC_FORMAT_STR " ---\n",
+ signame(sig)
+ PC_FORMAT_ARG);
+ line_ended();
+ }
}
if (!stopped)
--
1.8.1.4
More information about the Strace-devel
mailing list