Avatar billede sbm Nybegynder
26. april 2001 - 14:20 Der er 4 kommentarer og
1 løsning

Fork\'ede processer

Jeg har et perl cgi-program der laver et statistik-udtræk. Programmet aktiveres via en browser, og programmet laver strakt en fork(), barn-processen laver yderligere en fork() og hopper derefter ud. Herved bliver barnebarn-processen en daemon-proces, og fortsætter så med selve statistik-opgaven, og moderprocessen skriver i browseren at statistik-jobbet er startet, hvorefter moder-processen ligeledes lukker ned.

Her burde det slutte, men af en eller anden grund bliver browseren ved med at køre løs, indtil der på et tidspunkt times ud, og først da kommer beskeden om at jobbet er sat igang. Barnebarn-processen kører korrekt færdigt, men jeg vil naturligvis have at moder-processen skriver beskeden med det samme.

Jeg har forsøgt at flushe, jeg har forsøgt at lukke for STDOUT, men det er lige fedt. Det er som om forbindelsen til de underliggende processer ikke bliver skåret over som de skal.
Avatar billede Lasse Novice
26. april 2001 - 14:27 #1
jeg lytter lige med
Avatar billede fl Nybegynder
30. april 2001 - 20:58 #2
det ville være lettere at hjælpe hvis du smed noget kode op.

det er sikkert en \"løkke\" der løber lømbsk eller noget i den stil
Avatar billede sbm Nybegynder
01. maj 2001 - 10:14 #3
FL > Nej, som jeg har lavet det, er der ingen løkker at hænge fast i.

    my $procesID = fork();
    if ($procesID) { # start forælder-proces
        wait();
    print \"<HTML><HEAD><TITLE>Bekr&aelig;ftelse</TITLE></HEAD><BODY>\\n\";
        print \"Jobbet er p&aring;begyndt.<BR></BODY></HTML>\\n\";
            close (STDOUT);
        exit 0;
    } # slut forælder-proces
    else
    { # start barnproces
          $procesID = fork();
          if ($procesID)
            { exit 0;}
          else {    # start barnebarn-proces
                        ...udfører selve jobbet...
                  }

Opbygningen her skulle være den korrekte måde til at lave en baggrundsproces/daemonproces (Proces-id 1) som så kører videre selv om jeg lukker min browser. På trods af at jeg laver en proces der kører som daemon (og det gør den, jeg HAR checket), så bliver forbindelsen til browseren ikke lukket ned. Der går en eller anden tid før den timer ud, og skriver bekræftelsen i browseren. På dette tidspunkt er barnebarn-processen stadig ikke færdig med jobbet, så der kan kun være tale om en timeout.
Avatar billede sbm Nybegynder
01. maj 2001 - 10:16 #4
Hov. Da jeg skrev ...udfører selve jobbet... var det lidt utilstrækkeligt. Jeg glemte lige at gøre opmærksom på at jeg også her lukker for STDOUT.
Avatar billede sbm Nybegynder
02. maj 2001 - 13:40 #5
Jeg fandt selv løsningen.

Hvis man lukker for STDOUT, STDIN og STDERR bliver der lukket af til browseren, og den kan ikke længere se at der kører et job. Derved indser den at der ikke kommer flere data, og så kommer slutkommentaren på skærmen med det samme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester