Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Re: Time out

by janx (Monk)
on Jun 18, 2002 at 15:27 UTC ( #175392=note: print w/replies, xml ) Need Help??

in reply to Re: Time out
in thread Time out

Both of these examples are fine for stuff that doesn't do any calls to system or exec.

But that's probably exactly what he wanted to do.
The quick answer is: Read perlipc and go on from there.

Long answer: working on that ;-)

Update: Here's the long answer:

#!/usr/bin/env perl use strict; use warnings; use POSIX qw/:sys_wait_h/; my $child_pid = undef; my $status = fork; die "failed to fork\n" unless defined $status; if ($status > 0) { # this is the parent process. local $SIG{ALRM} = sub { print STDERR "operation timed out for PID $ +status\n"; kill 9, $status }; alarm 10; my $pid = 0; do { $pid = POSIX::waitpid ($status, POSIX::WNOHANG); } until ($pid > 0); alarm 0; } else { # this is the child process. system "ssh a_server_could_hang"; }

For any non-portability hit your OS vendor :-(


Replies are listed 'Best First'.
Re: Re: Re: Time out
by bluto (Curate) on Jun 18, 2002 at 22:06 UTC
    Your short answer is correct, but your solution doesn't work on AIX at least. It suffers from the same problem as the normal 'alarm' solution -- the parent dies, but the child (or grandchild in this case) lives on.

    The kill doesn't kill the grandchild created by system (even if you use -9 instead of a 9). Also, I'm not sure why you are using an alarm loop around a non-blocking waitpid. It's just going to spin the CPU for 10 seconds. You should either use alarm with a blocking waitpid or just poll/sleep/poll with the non-blocking one.


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://175392]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (3)
As of 2023-04-01 08:11 GMT
Find Nodes?
    Voting Booth?

    No recent polls found