alligator: Systemaufruf ...

Hallo zusammen,

ich bekomme da grad was nicht hin.
Und zwar will ich ein kleines Perl-Script schreiben, welches
mir unter Windows ein paar Progamme startet, wenn ich das Script ausführe. Das mit # davir habe ich schon getestet,

Folgender Code:

use strict;
use warnings;

print 'Starte: D:\Programme\G6 FTP Server\G6FTPSrv.exe'."\n";
#system("D:\Programme\G6 FTP Server\G6FTPSrv.exe");
#D:\\Programme\\G6 FTP Server\\G6FTPSrv.exe;
fork ("D:\Programme\G6 FTP Server\G6FTPSrv.exe");
print 'Gestartet!'."\n";
sleep 3;
print 'Starte: D:\Programme\DeeEnEs-2.3.25\DeeEnEs.exe'."\n";
#system("D:\Programme\DeeEnEs-2.3.25\DeeEnEs.exe");
#D:\\Programme\\DeeEnEs-2.3.25\\DeeEnEs.exe;
print 'Gestartet!'."\n";
sleep 3;

Jedoch ist es so, dass er mir das erste Programm startet, aber dann nich mehr zurückkommt um das 2 te Programm zu starten. Wenn ich aber das gestartete Programm beende, dann macht er weiter und startet das 2 Programm ... Also "system" bzw die Backticks warten anscheinend immer so lange bis der ausgeführte Systemaufruf beendet ist.
Wenn ich das mit "exec" machen will, dass steigt das Script natürlich nach dem ersten exec() sowieso aus ...

Bitte um Rat.
So long ...
alligator

  1. Halihallo alligator

    print 'Starte: D:\Programme\G6 FTP Server\G6FTPSrv.exe'."\n";
    #system("D:\Programme\G6 FTP Server\G6FTPSrv.exe");

    Wieso denn doublequotes? - Wäre doch mit einfachen wesentlich einfacher.

    #D:\\Programme\\G6 FTP Server\\G6FTPSrv.exe;
    fork ("D:\Programme\G6 FTP Server\G6FTPSrv.exe");

    perldoc -f fork

    fork gabelt den Prozess, startet aber selber keinen anderen.

    Jedoch ist es so, dass er mir das erste Programm startet, aber dann nich mehr zurückkommt um das 2 te Programm zu starten.

    Alle deine exec's warten auf das beenden des gestarteten Prozesses. Wenn du dies um-
    gehen willst, musst du deinen Prozess erst Gabeln und im Child-Prozess exec('prog')
    ausführen; dies ist die "gängige" Methode.

    Wenn ich aber das gestartete Programm beende, dann macht er weiter und startet das 2 Programm ... Also "system" bzw die Backticks warten anscheinend immer so lange bis der ausgeführte Systemaufruf beendet ist.

    Ja.

    Wenn ich das mit "exec" machen will, dass steigt das Script natürlich nach dem ersten exec() sowieso aus ...

    Nicht wenn du vorher fork() ausführst, dann fährt der Parent-Prozess ja normal weiter.
    Problem ist nur, dass fork() bei ActiveState Perl IMHO wohl implementiert ist, jedoch
    nicht forked (mit anderen Worten: es kommt kein Fehler, aber richtig macht es Perl
    auch nicht).
    Ich glaube du müsstest dies z.B. in einer cygwin-Umgebung realisieren, um das Verhalten
    von fork() genauer zu studieren (und alles andere auch, Windows taugt nunmal nicht für
    POSIX-Funktionen). Andernfalls kannst du natürlich auch über Win32::* auf die Win-API
    zugreifen und da die Prozesse starten lassen.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Servus,

      danke für die Antwort, werd mich da also erst mal durch die Perldoc und dann durch die Cpan-Doku zu Win32 kämpfem müssen *grummel*

      Aber ich habe dennoch nochmal eine Frage:
      Was zum Henker ist denn das "POSIX" ? Ich lese das so oft in
      x Perlbüchern, aber nirgends steht dazu ne Erklärung ...

      cya
      alligator

      1. Halihallo alligator

        Servus,

        Ich, Sklave? - Immer diese Österreicher... ;-)

        Was zum Henker ist denn das "POSIX" ? Ich lese das so oft in
        x Perlbüchern, aber nirgends steht dazu ne Erklärung ...

        http://www.google.ch/search?q=POSIX&ie=UTF-8&oe=UTF-8&hl=de&meta= und noch mehr
        Dokumentationen lesen, gelle? ;-)

        In kurzen Worten: POSIX = Portable Operating System Interface
        Eine IEEE Definition für ein "API" eines Betriebssystems; Windows ist nicht sehr POSIX-
        Konform, Unix AFAIK schon eher. Aber ehrlich, sogenau kenne ich POSIX auch nicht ;-)

        Z.B. definiert POSIX, dass es eine Prozedur namens fork() geben soll, welche einen
        Prozess gabelt. Unix(-derivate) haben diese fork() Prozedur implementiert und haben somit
        einen Teil des POSIX-Standards erfüllt.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.