Toon posts:

[CGI] afsluiten van cgi bij meerdere aanroepen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een cgi die vrij lang duurt en nu wil ik dat als iemand de pagina refreshed de oude thread van de cgi gekilled wordt (of dat het niet mogelijk is te refreshen) is hier een manier voor?

Voor als het niet duidelijk is:

client1 vraagt de pagina op: -cgi-thread 1 wordt gestart
client1 drukt op refresh: -cgi-thread 2 wordt gestart.
(tot zover normaal)
-cgi-thread 1 wordt gekilled.

Verwijderd

tuurlijk is daar een manier voor...

je kan gebruik maken van een lock file. Als die file is aangemaakt voert je script niet verder uit. (hier kan je bijv ook weer bepaalde timeout aan hangen.

En je kan ook je process van thread 1 killen lijkt me :)

Verwijderd

Topicstarter
Een lock-file werkt volgens mij niet aangezien de eerste thread gekilled moet worden.
dus de eerste thread mag geen file aanmaken en de 2e wel, maar hoe weet de 2e dan dat ie de 2e is :? (als je het nog kan volgen :))

Verwijderd

eerste thread maakt een lockfile aan

thread 2 wordt geopend.... checkt lockfile

lockfile ja? -> stop
lockfile nee? -> voeruit


of je wil dat ie thread 1 killed, kan ook..... dan niks lockfile, maar killen die hap.

Maarja ik vind je verhaal niet super duidelijk ofzo dus weet niet wat er meot gebeuren.

Verwijderd

Topicstarter
Nou het is de de bedoeling dat thread 1 gekilled wordt.

maar hoe wil je die dan killen? als je een kill signal stuurt dan sluit alles af, dus ook thread voor eventuele andere gebruikers.

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 28-07 15:42

RvdH

Uitvinder van RickRAID

Maak je een lockfile met als naam het IP adres van de persoon die de page bezoekt, bijvoorbeeld. Overigens moet je natuurlijk wel die lockfile weer verwijderen als het script afgelopen is.

$lockfile = $ENV{REMOTE_ADDR}.".lock.".$$;

Geeft dan een '1.2.3.4.lock.567' (waarbij 567 de pid is van het perl process) bestandsnaam.

  • RolandWitvoet
  • Registratie: Maart 2001
  • Niet online
Op het moment dat iemand op de stop-knop drukt wordt er een abort gestuurd naar de server, ik neem aan dat dat dat ook gebeurt wanneer refresh/reload wordt geklikt. Je kunt hier in je programma op testen en waarschijnlijk kun je ook apache wel zodanig instellen dat die zelfstandig de thread kilt (de vraag is of je dat laatste wilt, je script krijgt dan nl niet de kans om netjes af te sluiten)

Niet moeilijk gaan doen met locks, maar gewoon de technieken gebruiken die speciaal voor dat doel zijn gemaakt :)

NE2000 3-9 augustus, Elburg Open-air lan-party, 5 jaar alweer! Computers, kamperen, kampvuur, activiteiten, schier-eiland, dropping, tap-eiland, lezingen, workshops, bands, gezelligheid. NE2000, de andere Lanparty


Verwijderd

Topicstarter
Op vrijdag 08 februari 2002 07:13 schreef RolandWitvoet het volgende:
Op het moment dat iemand op de stop-knop drukt wordt er een abort gestuurd naar de server, ik neem aan dat dat dat ook gebeurt wanneer refresh/reload wordt geklikt. Je kunt hier in je programma op testen en waarschijnlijk kun je ook apache wel zodanig instellen dat die zelfstandig de thread kilt (de vraag is of je dat laatste wilt, je script krijgt dan nl niet de kans om netjes af te sluiten)

Niet moeilijk gaan doen met locks, maar gewoon de technieken gebruiken die speciaal voor dat doel zijn gemaakt :)
Dat wist ik niet, ik zal eens gaan testen

Verwijderd

Topicstarter
ik krijg helemaal geen abort, ook niet als ik op stop klik, moet ik daar nog iets voor instellen ofzo?

Verwijderd

Topicstarter
niemand?

  • RolandWitvoet
  • Registratie: Maart 2001
  • Niet online
Sorry voor de late response...

Dit programma:
#!/usr/local/bin/perl
while (1)
{
"The current time is ",scalar(localtime),"\n",
sleep 1;
}

Zou eindeloos moeten blijven lopen, maar als je kijkt wat er gebeurt dan zie je dat op abort/stop klikken of naar een andere url surfen direct het process killed. Dit werkt zowel onder Apache als IIS.

(als je onder apache output wilt zien van dit programma zul je non parsed haeaders moeten gebruiken (zoek even op "nph-"))

Het is eigenlijk dus standaard dat een process gekilled word door de server. Weet jij zeker dat de oude thread blijft lopen?
Ik heb ooit wel ergens gevonden hoe je kunt voorkomen dat de server het process killed zodat je netjes af kunt sluiten, maar ik zou absoluut niet meer weten waar.

NE2000 3-9 augustus, Elburg Open-air lan-party, 5 jaar alweer! Computers, kamperen, kampvuur, activiteiten, schier-eiland, dropping, tap-eiland, lezingen, workshops, bands, gezelligheid. NE2000, de andere Lanparty


Verwijderd

Topicstarter
vrij zeker ja, als ik de lijst met actieve processen opvraag staat die cgi er meerdere keren in en blijft er soms ook een paar minuten staan.
ik heb ook geprobeerd om ABORT af te vangen in het programma maar dat werd nooit ontvangen
Pagina: 1