Thread Problem mit fork() (24 answers)
Opened by bianca at 2015-09-05 20:15

bianca
 2015-09-08 08:05
#182080 #182080
User since
2009-09-13
6977 Artikel
BenutzerIn

user image
Danke für eure Antworten.
Habe 2 Testscripts gemacht:

test_fork1.pl:
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
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
use IO::Handle; STDOUT->autoflush(1);

my $pid = fork();

# Fehler
if (!defined $pid) { print time()." Fehler bei fork()\n"; }

# Vater
elsif ($pid) {
    print time()." Hier ist der Vater\n";
}

# Sohn
else {
    print time()." Sohn im Vaterscript terminiert jetzt\n";
    close STDIN;
    close STDOUT;
    exec("perl ".dirname(__FILE__)."/test_fork2.pl");
    exit();
}

test_fork2.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;
use IO::Handle; STDERR->autoflush(1);

print STDERR time()." Hier ist der Sohn, warte 5 Sekunden\n";
sleep(5);
print STDERR time()." Sohn terminiert jetzt\n";


Dann auf beiden Servers jeweils über den Webserver (ist eine selbstgebaute Art Shell) aufgerufen und das erhalten:

Ablauf auf dem Server mit Perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi wie erwartet:
  • 1441691919 Hier ist der Vater
  • 1441691919 Sohn im Vaterscript terminiert jetzt
  • 1441691919 Hier ist der Sohn, warte 5 Sekunden
  • - 5 Sekunden Pause -
  • 1441691924 Sohn terminiert jetzt



Ablauf auf dem Server mit Perl 5, version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi:
  • 1441691708 Hier ist der Sohn, warte 5 Sekunden
  • - 5 Sekunden Pause -
  • 1441691713 Sohn terminiert jetzt
  • 1441691708 Hier ist der Vater
  • 1441691708 Sohn im Vaterscript terminiert jetzt


Was könnte der Grund für das Verhalten des unteren Servers sein?

Editiert von bianca: use IO::Handle; STDOUT->autoflush(1); bei beiden ergänzt
Last edited: 2015-09-08 08:09:56 +0200 (CEST)
10 print "Hallo"
20 goto 10

View full thread Problem mit fork()