harleypig has asked for the wisdom of the Perl Monks concerning the following question:
I've got the following subroutine working relatively well for debugging forking processes in a screen session.
I'd like to submit it to whoever is maintaining the perl5db.pl file, or at least to rt.cpan.org. But before I do that, I'd like to make it as robust as possible.
I wasn't sure where else to put this--and since this is a request for the collective wisdom to evaluate the code this seemed as best a place as any. Please let me know if you think this can go better elsewhere.
Please note the following:
- Detecting whether we are actually under screen takes place elsewhere in perl5db.pl.
- If you exit the parent process before the child process(es) you're next debugging fork will be screwed up. I don't know why
And the test code I've been using it on:sub DB::get_fork_TTY { require File::Temp or return ''; my ( $FH, $filename ) = File::Temp::tempfile( UNLINK => 1 ); system( qq{screen -t 'Child $$' sh -c "tty > $filename ; sleep 10000 +00"} ) == 0 or return ''; chomp ( my $tty = <$FH> ); return $tty; }
Added check for failed fork as suggested#!/usr/bin/perl -w use strict; sub DB::get_fork_TTY { require File::Temp or return ''; my ( $FH, $filename ) = File::Temp::tempfile( UNLINK => 1 ); system( qq{screen -t 'Child $$' sh -c "tty > $filename ; sleep 10000 +00"} ) == 0 or return ''; chomp ( my $tty = <$FH> ); return $tty; } if ( my $child = fork ) { $DB::single = 1; print "We're in the parent! ($child)\n"; } else { die "Can't fork" unless defined $child; $DB::single = 1; print "We're in the child!\n"; } exit;
Harley J Pig
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Debugging forking scripts in screen
by kyle (Abbot) on Feb 09, 2007 at 02:43 UTC | |
by harleypig (Monk) on Feb 09, 2007 at 06:00 UTC |
Back to
Seekers of Perl Wisdom