agapanthus: PERL mehrere Befehle auf der Shell absetzen

Beitrag lesen

Moin.

Das Problem hier ist das Firefox zwar aufgeht, das Script aber solange stehen bleibt bis ich Firefox wieder abschiesse.

Warum das so ist, hat Struppi schon geschrieben. Du könntest das Problem auf 2 Wegen lösen: Benutze Threads oder Prozesse (fork). Dazu hier ein Beispiel. Es wird ein Child erzeugt, Parent und Child warten eine zufällige Zeit, wer zuerst fertig ist, killt den anderen.

#!/usr/bin/perl -w
use strict;

eigene ID merken

my $ParentId = $$;
my $timeout_parent = int(rand(9) + 1);
my $timeout_child = int(rand(9) + 1);

Prozess für Timer erzeugen

my $ChildId = fork();
die "fork: $!" unless defined $ChildId;

if ($ChildId) {
    # Elternprozess
    print "Elternprozess gestartet, Laufzeit $timeout_parent Sekunden \n";
    sleep ($timeout_parent);
    print "Timeout, Kindprozess killen!\n";
    # KindProzess killen
    kill("KILL",$ChildId);
}else{
    # Kindprozess
    print "Kindprozess gestartet, Laufzeit $timeout_child Sekunden \n";
    sleep ($timeout_child);
    print "Timeout, Elternprozess killen!\n";
    # Elternprozess killen
    kill("KILL",$ParentId);
}
exit;

Im Elternprozess startest Du den Firefox, im Kindprozess wartest Du, machst Dein Screenshot, killst den Elternprozess und beendest dich. Da Firefox ein Kind vom Elternprozess ist, wird er beim Killen des Prozesses mit entsorgt.

Gruß Frank