Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: unexpected quit - no error message

by almut (Canon)
on Mar 02, 2009 at 16:44 UTC ( #747498=note: print w/ replies, xml ) Need Help??


in reply to unexpected quit - no error message

Just a wild guess... (anything else is hard without seeing the code :): your script might be trying to write to a closed socket (closed by the device). This generates a SIGPIPE signal, whose default handler action is to abort the program (assuming you're on Unix).

Consider this example

#!/usr/bin/perl use strict; use warnings; use IPC::Open3; # uncomment to handle SIGPIPE yourself # $SIG{PIPE} = sub { warn "Broken pipe\n" }; open3(my $wh, my $rh, undef, qw'echo foo'); # tiny delay, so the command _has_ closed its stdin in the meantime select undef,undef,undef, 0.2; print $wh "foo\n"; # expected to fail in this case close $wh; print "done.\n"; # not reached, except when handling SIGPIPE yourse +lf

When you run this as is, it quits without printing "done.", because it's being terminated before. When you setup your own SIGPIPE handler, OTOH, you'd get your (self-generated) "Broken pipe" warning message, followed by "done."

(Note that this sample snippet would not exit with $? being zero (so this simple theory doesn't quite fit your case), but there are other circumstances conceivable where it might...)

How to debug?  You could run your script under strace (a tool I tend to recommend at least twice a week here :) in order to figure out what your script is doing last... This would likely prove helpful anyway, even if my above theory is wrong.

E.g. in the above sample case, you'd see something like this at the end of the trace

$ strace ./747486.pl (...) select(0, NULL, NULL, NULL, {0, 200000}) = ? ERESTARTNOHAND (To be res +tarted) --- SIGCHLD (Child exited) @ 0 (0) --- select(0, NULL, NULL, NULL, {0, 200000}) = 0 (Timeout) write(8, "foo\n", 4) = -1 EPIPE (Broken pipe) --- SIGPIPE (Broken pipe) @ 0 (0) --- +++ killed by SIGPIPE +++

(notice the write(8, "foo\n",... line which returns with EPIPE)


Comment on Re: unexpected quit - no error message
Select or Download Code
Re^2: unexpected quit - no error message
by kp2a (Sexton) on Mar 02, 2009 at 18:20 UTC
    AH! Thanks - I am learning - did not know about

    "This generates a SIGPIPE signal, whose default handler action is to abort the program (assuming you're on Unix)"

    Yes, UNIX, is there any other OS? I will check for that out. Try to catch it.

    two questions:
    why $? = 0 = success on abort?
    why an abort after> a successful write to the socket? - the device was updated AOK.

    thanks other suggestions - I do have debug statements around the spot where it seems to quit - again they must have been executed but the output does not appear! I assume that if it is an abort, the output buffer is not written???

    correction: using IO::Socket

      two questions:
      why $? = 0 = success on abort?
      why an abort after a successful write to the socket? - the device was updated AOK.

      If we had something to look at, we'd need to guess less :)

      Could you show the significant parts of your code?  Preferably also an strace of a run that did abort (the last 20, or so, lines should be sufficient, typically).

      If you don't see the debug messages, you may be suffering from buffering. This may be especially the case when the program terminates unexpectedly and the script is not able to flush its buffers.

      CountZero

      A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2014-12-29 00:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

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





    Results (183 votes), past polls