http://www.perlmonks.org?node_id=1022042

runrig has asked for the wisdom of the Perl Monks concerning the following question:

When calling disconnect() from Net::SFTP::Foreign, the annoying message "Killed by signal 15." prints to STDERR. In looking for a way to get rid of that message, I came across:
$SIG{TERM} = 'IGNORE';
..which works, but I wanted to set it in as small a scope as possible, but can anyone explain why this works:
my $sftp = do { local $SIG{TERM} = 'IGNORE'; Net::SFTP::Foreign->new( host => $host, user => $user, password => $pass, autodie => 1, ); }; $sftp->disconnect();
But this doesn't (actually I'm not clear on why even the first one works...I thought it would only affect signals that the perl process recieves...not the ssh process) :
my $sftp = do { #local $SIG{TERM} = 'IGNORE'; Net::SFTP::Foreign->new( host => $host, user => $user, password => $pass, autodie => 1, ); }; do { local $SIG{TERM} = 'IGNORE' $sftp->disconnect(); }
Update: It's pretty clear to me now...the new() forks/execs a new process with the signal mask set to ignore SIGTERM, so when you actually disconnect(), the completely separate process is still operating under the ignore SIGTERM signal mask, and has no knowledge of what perl's current signal mask is.

Replies are listed 'Best First'.
Re: Net::SFTP::Foreign message on disconnect
by salva (Canon) on Mar 06, 2013 at 18:10 UTC
    the "Killed by signal 15" message is printed by the slave ssh. It seems that it doesn't reset the signal mask when it is started from the perl process.
Re: Net::SFTP::Foreign message on disconnect
by Anonymous Monk on Jun 05, 2013 at 09:55 UTC
    Thanks Runrig, that was exactly what I needed!
Re: Net::SFTP::Foreign message on disconnect
by Anonymous Monk on Sep 04, 2013 at 23:20 UTC
    Thank you. It also works for me but I was not using sftp->disconnect(), only the sftp->new. At the end of the script I used undef $sftp, it worked for linux OS but not for Soloris. It was annoying me a lot for long time.
      I ramdomly get "Killed by signal 15." on STDERR as well. I've added these two lines to see if this will resolve my issues. My next step will be to localize the signal.
      $sftp->disconnect; #try to avoid random error "Killed by signal 15." undef $sftp;
      Version
      $ rpm -q --whatprovides 'perl(Net::SFTP::Foreign)' perl-Net-SFTP-Foreign-1.75-1.el6.noarch
        Bug: https://rt.cpan.org/Public/Bug/Display.html?id=78517