in reply to Is there any way of determining the current line number of a child process while it is running?
If your using *nix, instead of using fork, use my $pid = open( KID, '-|') or die $!; to kick of the child process. The child can then print __LINE__, "\n"; at strategic points (or every line if you wish) and the parent reads from <STDIN> (Updated: Thanks runrig) <KID> to get the line numbers.
See the "Safe pipe opens" section of perlipc for examples.
I couldn't get this to work under Win32 and tried pipe as an alternative, which works except I cannot work out how to get the parent process to detect that the child has closed the pipe? Maybe someone else knows the trick for this?
#! perl -sw use strict; use IO::Handle; pipe(FROM_CHILD, TO_PARENT) or die $!; TO_PARENT->autoflush(1); if( my $pid = fork ) { #parent while( <FROM_CHILD> ) { chomp; print "\rChild is processing line:$_ "; } print 'Child appears to be finished.'; ## This never reached? close FROM_CHILD; } else { for (1..10) { print TO_PARENT __LINE__, $/; select undef, undef, undef, 0.0 +5; print TO_PARENT __LINE__, $/; select undef, undef, undef, 0.0 +5; print TO_PARENT __LINE__, $/; select undef, undef, undef, 0.0 +5; print TO_PARENT __LINE__, $/; select undef, undef, undef, 0.0 +5; } close TO_PARENT; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Is there any way of determining the current line number of a child process while it is running?
by Anonymous Monk on May 01, 2003 at 19:34 UTC | |
by BrowserUk (Patriarch) on May 02, 2003 at 07:09 UTC |