----- Original Message -----
Currently, when using pipe in command line, we cannot specify
a script with shebang directly like this:
crash> foreach bt | ./analyze.awk
crash: pipe operation failed
(or it looks like crash can loop until Ctrl-C depending on timing)
This is a bit confusing and inconvenient because it's not shell-like
behavior.
The cause is that output_command_to_pids() searches /proc/PID/stat
files for "(path/to/script)" string and cannot find such process,
and also the ps kludge doesn't work well in this case. This patch
removes the part except its file name like "(script)" so that it can
find the process.
Just to clarify, is this is due to using "./analyze.awk" (with the preceding
"./"),
whereas if you were to use "analyze.awk", it would work OK?
Dave
Signed-off-by: Kazuhito Hagio <k-hagio(a)ab.jp.nec.com>
---
cmdline.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/cmdline.c b/cmdline.c
index ee08f06..c0a9f4f 100644
--- a/cmdline.c
+++ b/cmdline.c
@@ -806,7 +806,7 @@ output_command_to_pids(void)
char buf1[BUFSIZE];
char buf2[BUFSIZE];
char lookfor[BUFSIZE+2];
- char *pid, *name, *status, *p_pid, *pgrp;
+ char *pid, *name, *status, *p_pid, *pgrp, *comm;
char *arglist[MAXARGS];
int argc;
FILE *pipe;
@@ -815,7 +815,8 @@ output_command_to_pids(void)
retries = 0;
shell_has_exited = FALSE;
pc->pipe_pid = pc->pipe_shell_pid = 0;
- sprintf(lookfor, "(%s)", pc->pipe_command);
+ comm = strrchr(pc->pipe_command, '/');
+ sprintf(lookfor, "(%s)", comm ? ++comm : pc->pipe_command);
stall(1000);
retry:
if (is_directory("/proc") && (dirp =
opendir("/proc"))) {
--
1.8.3.1
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility