26. april 2001 - 14:20Der 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.
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æftelse</TITLE></HEAD><BODY>\\n\"; print \"Jobbet er på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.
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.
Synes godt om
Ny brugerNybegynder
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.