Frage zu Blocking.pm und der Funktion BlockingKill

Begonnen von CoolTux, 17 September 2018, 11:58:42

Vorheriges Thema - Nächstes Thema

CoolTux

Hallo Rudi,

Warum wird bei einem Aufruf der Funktion BlockingKill ganz am Ende die Funktion BlockingStart(); aufgerufen?
Dies führt bei meinen Usern dazu das der aufgerufende Unixprozess (gatttool) zwar korrekt beendet wird aber danach sofort wieder gestartet wird und dann in der Prozessliste auf ewig bestehen bleibt.
Ein Test mit auskommentierten Funktionsaufruf BlockingStart() bringt eine zu erwartende Aktion. Der gatttool Prozess bleibt aus der Prozessliste raus und wird mit dem nächsten Aufruf durch mein Modul gestartet.


BlockingKill($)
{
  my $h = shift;

  return if($h->{terminated});

#  if($^O !~ m/Win/) {
    if($h->{pid} && $h->{pid} !~ m/:/ && kill(9, $h->{pid})) {
      my $ll = (defined($h->{loglevel}) ? $h->{loglevel} : 1); # Forum #77057
      Log $ll, "Timeout for $h->{fn} reached, terminated process $h->{pid}";
      $h->{terminated} = 1;
      if($h->{abortFn}) {
        no strict "refs";
        my $ret = &{$h->{abortFn}}($h->{abortArg},
                        "Timeout: process terminated");
        use strict "refs";

      } elsif($h->{finishFn}) {
        no strict "refs";
        my $ret = &{$h->{finishFn}}();
        use strict "refs";

      }
      delete($BC_hash{$h->{bc_pid}});
      InternalTimer(gettimeofday()+1, "BlockingStart", \%BC_hash, 0)
        if(looks_like_number($h->{pid}) && kill(0, $h->{pid})); # Forum #58867
    }
#  }
  BlockingStart();
}





Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

ZitatWarum wird bei einem Aufruf der Funktion BlockingKill ganz am Ende die Funktion BlockingStart(); aufgerufen?
Weil danach eine geforkte Instanz weniger am vorhanden ist, und wenn weitere Aufgaben in der Schlange warten (siehe blockingCallMax), dann muessen diese gestartet werden. BlockingStart sollte nichts starten, was nicht in der Warteschlage ist.


ZitatEin Test mit auskommentierten Funktionsaufruf BlockingStart() bringt eine zu erwartende Aktion
Im Anhang hast du aber die Kill-Funktionalitaet fuer Windows aktiviert.
BlockingKill funktioniert leider nicht unter Windows, da hier fork von perl nur emuliert wird.

CoolTux

Zitat von: rudolfkoenig am 17 September 2018, 13:39:35
Weil danach eine geforkte Instanz weniger am vorhanden ist, und wenn weitere Aufgaben in der Schlange warten (siehe blockingCallMax), dann muessen diese gestartet werden. BlockingStart sollte nichts starten, was nicht in der Warteschlage ist.

Ok leuchtet ein

Zitat von: rudolfkoenig am 17 September 2018, 13:39:35
Im Anhang hast du aber die Kill-Funktionalitaet fuer Windows aktiviert.
BlockingKill funktioniert leider nicht unter Windows, da hier fork von perl nur emuliert wird.

Ich nicht. Ist aus den original svn Sourcen von vor ein paar Tagen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

ZitatIst aus den original svn Sourcen von vor ein paar Tagen
Sorry, war verwirrt, dann sollte BlockingKill unter Windows doch funktionieren.

Falls du immer noch ein Problem hast, und vermutest, dass es an Blocking.pm liegt, dann bitte etwas zum Nachstellen mir geben.

CoolTux

Zitat von: rudolfkoenig am 17 September 2018, 14:52:59
Sorry, war verwirrt, dann sollte BlockingKill unter Windows doch funktionieren.

Falls du immer noch ein Problem hast, und vermutest, dass es an Blocking.pm liegt, dann bitte etwas zum Nachstellen mir geben.

Wenn ich noch was brauche dann werde ich Dir etwas kurzes zum nachstellen geben. Habe ja selbst das Problem leider nicht. Ist ein User. Danke Dir jedenfalls.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net