ATEXIT |
A la sortie |
|---|---|
Perl |
POSIX |
Syntaxe
| sub POSIX::atexit($fonction); |
Paramètres
| Nom | Description |
|---|---|
| $fonction | Ce paramètre permet d'indiquer une fonction à traiter avant de terminer le processus |
Description
Cette fonction doit être appelée à la fin d'un programme pour le terminer.
Remarques
- Permet d'enregistrer une fonction appelée avant la fin du programme : La fonction POSIX::atexit($fonction) permet de déclarer une fonction de nettoyage ou de finalisation qui sera automatiquement appelée juste avant la fin de l'exécution du script Perl, une fois que l'interpréteur commence sa phase de terminaison.
- Similaire à l'instruction END de Perl, mais en mode POSIX : Perl propose aussi un bloc END { ... } natif pour exécuter du code à la fin d'un script. atexit est une version conforme à la norme POSIX, offrant une alternative plus explicite dans un contexte d'interopérabilité ou de portabilité POSIX.
- Doit recevoir une référence à une fonction : Le paramètre passé à POSIX::atexit doit être une référence de fonction Perl, par exemple :
- Peut enregistrer plusieurs fonctions à exécuter en fin de programme : Il est possible d'appeler atexit plusieurs fois pour enregistrer plusieurs routines, qui seront alors appelées dans l'ordre inverse de leur enregistrement, à la manière d'une pile (LIFO - Last In, First Out).
- Très utile pour libérer des ressources système : On utilise atexit pour fermer des fichiers, supprimer des fichiers temporaires, libérer des verrous, ou envoyer des logs de fin d'exécution, ce qui est essentiel dans les scripts critiques ou ceux manipulant des ressources externes.
- Ne fonctionne pas sur tous les systèmes Perl ou versions : POSIX::atexit est documentée comme non totalement fonctionnelle ou non disponible dans certaines distributions Perl. Elle dépend fortement de l'implémentation du module POSIX, et son utilisation n'est donc pas toujours garantie.
- Aucune garantie en cas de terminaison brutale : Les fonctions enregistrées via atexit ne seront pas exécutées si le script se termine brutalement, par exemple via kill -9 ou un die non intercepté. Pour une exécution fiable, il faut coupler atexit avec une gestion robuste des signaux ($SIG{TERM},...).
- Alternative recommandée : bloc END ou module Scope::Guard : En pratique, il est souvent plus sûr et plus perlish d'utiliser un bloc END { ... } ou des modules comme Scope::Guard pour garantir l'exécution du code de nettoyage. Cela permet une meilleure portabilité et un comportement plus prévisible en environnement Perl pur.
Ce n'est pas une chaîne ou un nom de fonction littéral, ce qui nécessite une certaine rigueur syntaxique.
Voir également
Langage de programmation - Fonction C pour Linux - atexit
Dernière mise à jour : Dimanche, le 18 octobre 2015