Thread Problem mit Filehandle im END Block (8 answers)
Opened by PROXEN at 2014-08-04 20:23

Linuxer
 2014-08-04 22:10
#176713 #176713
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Das Problem scheint Deine Pipe nach tee zu sein; ersetze ich diese durch eine Umleitung in eine Datei, steht da auch nachher das Erwartete drin (gut, dafür erscheint nichts mehr auf der Konsole; aber es geht ums Prinzip, wo die Ausgaben bleiben).

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /usr/bin/env perl
use strict;
use warnings;

$SIG{INT} = \&interrupt;

#open LOGFILE, "|-", "tee some_file.out";
open LOGFILE, ">", "/tmp/log.txt";
LOGFILE->autoflush(1);

select LOGFILE;
print "fileconsole!\n";
print "pause\n";
my $in = <STDIN>;
select STDOUT;
print "console1\n";

die;
sub interrupt {
    print  "Caught a control c!\n";
    die;
}

END {

  if(fileno(LOGFILE)){
    print "close logfile\n";
    close(LOGFILE) or warn;
  }
}


Test & Ergebnis:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### ORIGINAL
$ perl /tmp/t3.pl
fileconsole!
pause
^CDied at /tmp/t3.pl line 20.
141 $

### ERSETZUNG DURCH EINE LOGDATEI (siehe Code oben)
$ perl /tmp/t3.pl ; cat /tmp/log.txt
^CDied at /tmp/t3.pl line 21.
fileconsole!
pause
Caught a control c!
close logfile
0 $


Beachte auch die unterschiedlichen Exit-codes (mit Pipe 141, mit Ausgabeumleitung in Datei 0).

Den genauen Grund kann ich derzeit nicht benennen.

EDIT: Möglicherweise findet sich etwas in http://perldoc.perl.org/perlipc.html
EDIT2: Nach Hinweisen aus dem großen Datenorakel (das mit den 2 G's und O's) deutet der Exitcode 141 auf das Signal SIGPIPE hin. Du solltest also in dieser Richtung forschen.
Last edited: 2014-08-04 22:20:50 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Problem mit Filehandle im END Block