Philipp Hasenfratz: Socket, system und Prozess in den Hintergrund schicken

Beitrag lesen

Halihallo coolblue

weder fork noch exec scheinen mir bei meinem Problem weiter zu helfen, wenn doch, dann habe ich etwas nicht verstanden oder völlig falsch gemacht.

Es wäre gut einen Link auf vorherige Postings zu haben, wo das Thema
anscheinend schon erörtert wurde.

Der Server soll den Befehl oder den Prozess ausführen und danach weiterhin auf den Port lauschen, um gegebenfalls weitere "Befehle" auszuführen. Er soll nicht auf das Ende des Prozesses warten. Das Problem ist nun, dass der Server an der Stelle, an der er den system Befehl ausführt, solange hängt, bis der mit system gestartete Prozess gekillt wird oder sich selbst beendet.

Das wiederspiegelt sich in deinen Programmen. Ich komme gleich
dazu...

while($client = $server->accept()) {
   $command=<$client>;
   ***system Befehl***
}

Hier ist wohl klar, dass er immer auf Beendigung von system() wartet,
da kein fork verwendet wird; system wartet immer auf das Beenden des
Prozesses, auch wenn da ein & steht...

system('$command &');

Nicht probieren, wissen. Variablen werden nur in Doublequotes
aufgelöst...

use POSIX;

wofür?

while($client = $server->accept()) {
   $command=<$client>;
   $pid = fork;
   exit if $pid;
   system("$command &");
}

Also:

Server lauscht...
Server erhält connection -> $client
*Server* wird beendet (was er nicht soll!).
Client führt $command aus und lauscht dann weiter.

Das wird besser so gemacht:

while ( $client = $server->accept()) {
    $command = chomp(<$client>);
    $pid = fork();
    die('cannot fork!') unless (defined($pid));
    unless ($pid) {   # also Child...
        system("$command");  # ... führt Befehl aus...
        exit;         # ... und stirbt dann.
    }
    # und Parent lauscht gleich weiter!
}

So, damit sollte es dann funktionieren.

Viele Grüsse

Philipp

0 47

Socket, system und Prozess in den Hintergrund schicken

coolblue
  • perl
  1. 0

    Einen Schritt weiter

    coolblue
    1. 0
      Philipp Hasenfratz
      1. 0
        coolblue
        1. 0
          Philipp Hasenfratz
          1. 0
            coolblue
            1. 0
              Philipp Hasenfratz
              1. 0

                Eine letzte Frage... hoffentlich :-)

                coolblue
                1. 0
                  Philipp Hasenfratz
                  1. 0
                    coolblue
                    1. 0
                      Philipp Hasenfratz
                      1. 0

                        Der wirklich letzte ... :-)

                        coolblue
                        1. 0
                          Philipp Hasenfratz
                  2. 0

                    CHOMP funktioniert nicht... was mache ich falsch?

                    coolblue
                    1. 0
                      Philipp Hasenfratz
                      1. 0
                        coolblue
                2. 0
                  Struppi
                  1. 0
                    coolblue
                    1. 0
                      EisFux
                      1. 0
                        coolblue
                        1. 0
                          Struppi
                          1. 0

                            Absolut klasse !

                            coolblue
                            1. 0
                              Philipp Hasenfratz
                              1. 0
                                coolblue
                              2. 0
                                coolblue
                                1. 0
                                  Philipp Hasenfratz
                                  1. 0
                                    coolblue
                          2. 0
                            Philipp Hasenfratz
                            1. 0

                              Benchmark, "chomp"-Lösungen

                              Philipp Hasenfratz
                              1. 0
                                coolblue
                                1. 0
                                  Philipp Hasenfratz
                                  1. 0
                                    coolblue
                            2. 0
                              Struppi
                      2. 0
                        Philipp Hasenfratz
                        1. 0
                          coolblue
                          1. 0
                            Philipp Hasenfratz
                            1. 0
                              coolblue
                            2. 0

                              Fehler im Forum nachträglich korrigieren

                              EisFux
                              • zu diesem forum
                              1. 0
                                Christian Kruse
                          2. 0
                            EisFux
                        2. 0
                          EisFux
                          1. 0
                            Philipp Hasenfratz
                            1. 0
                              Philipp Hasenfratz
  2. 0
    Philipp Hasenfratz
    1. 0
      coolblue
      1. 1
        Philipp Hasenfratz
        1. 0
          coolblue