Thread Skript nach Programmaufruf fortsetzen (12 answers)
Opened by IceRage at 2008-09-16 02:13

IceRage
 2008-09-28 04:01
#114994 #114994
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
Hallo,

sorry das ich deswegen noch mal nachfrage. Aber ich habe jetzt alles mir mögliche ausprobiert, und es haut einfach nicht so hin, wie es soll. Das Problem ist, dass, egal wie ich firefox aufrufe, einfach der kindprozess nicht weiter abgearbeitet wird. Ich habe versucht firefox mit exec und system in den Hintergrund zu legen, ich habe versucht mit backticks, mit und ohne Rückgabewerte zu arbeiten ... nichts funktioniert.

Der Gedanke ist, dass der Elternprozess auf den Kindprozess warten soll, und der Kindprozess sich nach 35 sekunden, mit einem exit(0) beendet (und damit auch das Browserfenster geschlossen wird). Warum jetzt aber der Kindprozess trotz des Aufrufs mittels system() nicht weiter arbeitet, will mir einfach nicht in den Kopf. Ich will jetzt hier keinen Glaubenskrieg der Betriebssysteme entfachen, aber unter window$ funktioniert das ganz einfach mit: system("/usr/bin/firefox test.html"); .. warum geht das mit meinem Debian nicht? ... raff ich nicht.


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
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use POSIX;
use warnings;
use strict;

my $file = "lines.txt";
open(LINES, "<$file");

my @ar_lines = <LINES>;
print $ar_lines[0]."\n";
foreach my $link (@ar_lines) {
        print $link."\n";
        my $pid = fork();

        if($pid == 0){
                # Child-Prozess 
                print "Ich bin das Kind:  ",$$,"\n";

                # hier zu öffnender link, klappt alles nicht, auch nicht mit Backticks
                # my $ret_val = system("/usr/bin/firefox $link");
                # my $ret_val = exec("/usr/bin/firefox $link");
                # my $ret_val = `/usr/bin/firefox $link &`;
                # my $ret_val = system("/usr/bin/firefox $link &");
                system("/usr/bin/firefox test.html");

                sleep(35);
                exit(0);
        } else {
                # Parent-Prozess
                print "Ich bin der Vater: ",$$,"\n";    
                waitpid($pid, 0);

                print "Ich bin der Vater: ",$$,"\n";
                print "Und mein Kind ist: ",$pid,"\n";
        }
        sleep(20);
}



Das Browserfenster möchte ich schließen, weil sonst, wenn ich das Skript morgens starte, am Abend 100 Seiten geöffnet sein könnten. Und da das Skript auf einem alten Rechner läuft, würde da der Arbeitsspeicher für die übrigen Programme nicht mehr ausreichen (512MB). Wäre echt nett, wenn mir dabei noch mal jemand helfen könnte.

Vielen Dank. IceRage

View full thread Skript nach Programmaufruf fortsetzen