Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4729

Re: Offene File Handles nach kopieren mit phpseclib3

From Arno Welzel <usenet@arnowelzel.de>
Newsgroups de.comp.lang.php
Subject Re: Offene File Handles nach kopieren mit phpseclib3
Date 2021-08-20 09:47 +0200
Message-ID <io9509F9urmU2@mid.individual.net> (permalink)
References <sffmbf$p6r$1@gwaiyur.mb-net.net> <io94s4F9urmU1@mid.individual.net>

Show all headers | View raw


Arno Welzel:

> Jan Novak:
> 
>> Hallo,
>>
>> ein primärer php (cli) Prozess forkt immer wieder neu einen Prozess, 
>> welcher Dateien u.a. mit der "phpseclib3" Klasse von Server a nach b 
>> kopiert. Leider bleibt nach dem Kopieren immer ein File Handle offen, 
>> was nach gewisser Zeit Probleme natürlich macht, obwohl der ge'forkte 
>> Prozess sich sauber beendet hat.
>>
>> Die einzige Möglichkeit dies zu verhindern, bzw. zu resetten ist im 
>> Moment, den primären CLI Prozess neu zu starten, was aber in unserem 
>> Fall andere Nachteile mit sich zieht.
>>
>> Meine Frage:
>> Gibt es ein Möglichkeit, die offenen Handles korrekt schliessen zu lassen?
> 
> Ja, indem der Prozess, der sie öffnet, das korrekt tut. Einen anderen
> Weg gibt es nicht.
> 
>> zur Info: Sofern die Dateien mit anderen Klassen z.B. per ftp oder nur 
>> lokal kopiert werden, besteht das Problem nicht. Nur dann, wenn die 
>> phpseclib3 benutzt wird.
> 
> Dann nutze phpseclib3 nicht oder frage dort, warum die Handles nicht
> sauber schließen und/oder ihre forks nicht sauber abschließen. Nein,
> einen geforkten Prozess einfach nur zu beenden, reicht nicht. Der
> Aufrufer, der den Fork erstellt hat, muss auch auf dessen Beendigung
> reagieren, sonst passieren u.A. genau solche Probleme.

Ergänzung dazu: aus einem Projekt, wo ich mit sowas zu tun hatte:


    protected function signalHandler($signal)
    {
        if (SIGCHLD === $signal) {
            // Clean up child processes

            $pid = pcntl_waitpid(-1, $status, WNOHANG);
            while ($pid > 0) {
                $exitCode = pcntl_wexitstatus($status);
                $pid = pcntl_waitpid(-1, $status, WNOHANG);
            }
        } else {
            $this->run = false;
        }
    }

...

        if (function_exists('pcntl_signal')) {
            pcntl_signal(SIGTERM, [$this, 'signalHandler']);
            pcntl_signal(SIGHUP, [$this, 'signalHandler']);
            pcntl_signal(SIGINT, [$this, 'signalHandler']);
            pcntl_signal(SIGCHLD, [$this, 'signalHandler']);
        }



-- 
Arno Welzel
https://arnowelzel.de

Back to de.comp.lang.php | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Offene File Handles nach kopieren mit phpseclib3 Jan Novak <repcom@gmail.com> - 2021-08-17 08:52 +0200
  Re: Offene File Handles nach kopieren mit phpseclib3 k@rl.pflaesterer.de (Karl Pflästerer) - 2021-08-19 12:50 +0200
  Re: Offene File Handles nach kopieren mit phpseclib3 Arno Welzel <usenet@arnowelzel.de> - 2021-08-20 09:45 +0200
    Re: Offene File Handles nach kopieren mit phpseclib3 Arno Welzel <usenet@arnowelzel.de> - 2021-08-20 09:47 +0200
    Re: Offene File Handles nach kopieren mit phpseclib3 Jan Novak <repcom@gmail.com> - 2021-08-20 15:33 +0200

csiph-web