Messages in this thread | | | Subject | Re: wait() and strace -f | From | OGAWA Hirofumi <> | Date | Wed, 19 Dec 2001 00:32:33 +0900 |
| |
Kurt Roeckx <Q@ping.be> writes:
> int main() > { > int i; > > if (!fork()) > { > /* Child 1. */ > return 0; > } > > if (!fork()) > { > /* Child 2. */ > sleep(10); > return 0; > } > > /* Parent. */ > sleep(1); > wait(&i); > return 0; > } > > Without strace -f, this program stops after 1 second and the > second child still lives for 9 seconds. With strace -f this > program stops after 10 second after the second child died. > > I think it's related to strace being the "real" parent of the > child. But that doesn't really explain why I need 2 childs.
Probably, it's feature (or bug) of strace. If the trace process has child, trace of a child is continued before wait() of parent. Then, exit() of the child process continue wait() of parent.
> if (!fork()) > { > /* Child 1. */ sleep(2); > return 0; > }
The above continued the parent after 2 seconds. -- OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |