diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2013-06-21 16:19:46 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2013-06-21 16:19:46 +0200 |
commit | 71d3d29a9d51add731c07e328a7394db0b3dd212 (patch) | |
tree | fcf805aa61cf725f6c00efddc85d0c989ae0b4ca /strace.c | |
parent | e2567d54dd57438d8ebe0167748cde7b661103e8 (diff) | |
download | strace-71d3d29a9d51add731c07e328a7394db0b3dd212.tar.gz strace-71d3d29a9d51add731c07e328a7394db0b3dd212.tar.bz2 strace-71d3d29a9d51add731c07e328a7394db0b3dd212.tar.xz |
Panic a bit less when we see an unknown pid
I stumbeld over this case when I used "exec stace ...".
* strace.c (trace): Do not exit if we see an unknown pid in wait4.
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'strace.c')
-rw-r--r-- | strace.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -2055,10 +2055,17 @@ trace(void) pid); } else { /* This can happen if a clone call used - CLONE_PTRACE itself. */ - if (WIFSTOPPED(status)) + * CLONE_PTRACE itself, or if we inherited + * an unknown child. Example: + * (sleep 1 & exec strace sleep 2) + */ + if (WIFSTOPPED(status)) { ptrace(PTRACE_CONT, pid, (char *) 0, 0); - error_msg_and_die("Unknown pid: %u", pid); + error_msg("Stop of unknown pid %u seen, PTRACE_CONTed it", pid); + } else { + error_msg("Exit of unknown pid %u seen", pid); + } + continue; } } |