Forum Programmation.perl Proc::Daemon et bloc END { }

Posté par  .
Étiquettes : aucune
0
31
juil.
2008
Toujours pour mes statistiques d'utilisation de l'IPv6 https://linuxfr.org/forums/41/25592.html , j'ai fait un daemon en perl qui utilise iptables http://www.linux.com/articles/50649 .

J'ai mis ce code dans un bloc END pour mettre à jour une dernière fois la BDD à l'arrêt du daemon :

END {
if (getppid() == 1) { update_stats(); }
}


Avec getppid() == 1, j'ai déjà empêché la mise a jour à l'arrêt du processus initial, mais Proc::Daemon forke deux fois le programme pour le séparer de son parent.

J'aimerai que update_stats() ne soit pas appelé à la fin du premier fork.

J'ai penser tester si $$ (le pid du processus en cours) est >= au pid du processus original + 2 mais ce n'est pas très (voire pas du tout) fiable.

Bref une idée ?
  • # Pourquoi faire simple...

    Posté par  . Évalué à 4.

    Après Proc::Daemon::Init, tu valides un flag que tu testes dans le bloc END.


    Proc::Daemon::Init;
    my $flag = 1;

    ...

    END {
    update_stats() if defined $flag;
    }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.