Richard: Semaphoren nicht sauber gelöscht!

hi zusammen,

ich benutze semaphoren zum absichern von exclusiven prozessen. die 2 funktionen werden so aufgerufen:

function mach_was() {

$filename = "irgendwas/test.txt";
    if (!file_exists($filename)) {
         $fp=fopen($filename,'w');
   fclose($fp);
        }
 $SEM_ID = sem_lock($filename);

[... HIER FÜHRE ICH WAS AUS ...]

sem_unlock($SEM_ID);
 @unlink($filename);
}

function sem_lock ($filename) {
 if(function_exists('ftok')){
     $sem_key = ftok($filename, "A");
     $sem_id = sem_get($sem_key, 1);
     sem_acquire($sem_id);
     return $sem_id;
 }
}

function sem_unlock($sem_id) {
    if(function_exists('sem_release')){
  sem_release($sem_id);
 }
}

nun habe ich das problem, daß sich im speicher semaphoren sammeln. obwohl ignore_user_abort() aktiviert ist. das macht den ganzen server platt. kann mir da jemand helfen?

  1. Hello,

    vielleicht solltest Du Dich mit register_shutdown_function()
    http://de.php.net/manual/de/function.register-shutdown-function.php
    anfreunden, oder aber anstelle von Semaphoren Temp-Files benutzen. Die werden vom System auch wieder automatisch beseitigt.
    Oder aber eben die Funktion flock(), die aber angeblich auf bestimmten Multiprozesorsystemen noch Zicken machen soll. Ich konnte das aber bisher noch nicht verifizieren.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau