Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Testing for a background process waiting for input

by Eliya (Vicar)
on Apr 13, 2012 at 21:13 UTC ( #964995=note: print w/ replies, xml ) Need Help??


in reply to Testing for a background process waiting for input

What I really need to be able to do is to check the background program to see if it's stalled waiting for input

Based on the idea that an attached strace would typically show the line

read(0,

(and wait there) in case the respective program is waiting for user input, you could check if you get nothing but this within a certain period of time (3 secs in the sample):

#!/usr/bin/perl -w use strict; $SIG{CHLD} = 'IGNORE'; my $pid = fork(); die $! unless defined $pid; unless ($pid) { # run background program to watch exec q(exec perl -E 'for (1..10) {say "...working"; sleep 1} <>'); exit; } sub check { my $pid = shift; my $pid2 = open my $strace, "-|", "strace -qp $pid 2>&1" or die $! +; local $SIG{ALRM} = sub { kill INT => $pid2 }; print "checking...\n"; alarm 3; my $trace; $trace.=$_ while <$strace>; alarm 0; close $strace; if ($trace =~ /^read\(.*$/) { # check strace output print "=> hanging\n"; kill TERM => $pid; # (optional) return 0; } else { print "=> still running\n"; return 1; } } 0 while check($pid); __END__ $ ./964971.pl checking... ...working ...working ...working => still running checking... ...working ...working ...working => still running checking... ...working ...working ...working => still running checking... ...working => still running checking... => hanging

Of course, that would require a platform that has strace or similar...


Comment on Re: Testing for a background process waiting for input
Select or Download Code
Re^2: Testing for a background process waiting for input
by SBECK (Pilgrim) on Apr 14, 2012 at 00:23 UTC
    I'd thought of strace, and was hoping to use a pure perl solution, but I can't think of one, so maybe that's what I'm stuck with. Not the end of the world I suppose.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (8)
As of 2014-12-25 00:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (159 votes), past polls