IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

nettoyage en cas de kill du soft


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut nettoyage en cas de kill du soft
    Bonjour,

    je voulais savoir s'il était possible de réaliser des actions lorsqu'un soft python se fait killer ou terminer.

    L'idée c'est de nettoyer tous les fichiers "temporaires" créés par le soft si celui ci se fait dégager brutalement.

    Est-ce possible ?

    Merci à vous !
    Sous Kubuntu 20.04

  2. #2
    Membre averti Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Points : 388
    Points
    388
    Par défaut

    Quels Types de Kills ? KeyboardInterrupt ? un Kill system particulier ? Je d'irais sans avoir eu ta réponse que c'est à ton gestionnaire d'exceptions que revient cette tâche...
    Toute chose dépend de la valeur qu'on lui attribue !

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut Hizoka,

    À priori je dirais non.

    Si le process est mort il est mort.

    Sous Linux il ne faut pas s'occuper de ça ce sera nettoyé automatiquement par le système.

    Par contre, ce que tu peux faire, si tes fichiers temporaires sont clairement identifiables c'est qu'à chaque démarrage de ton appli elle vérifie si il ne reste pas des résidus d'une utilisation précédente.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hizoka Voir le message
    L'idée c'est de nettoyer tous les fichiers "temporaires" créés par le soft si celui ci se fait dégager brutalement.
    Un fichier temporaire crée par tempfile devrait se détruire tout seul. Sinon, il faut déclarer un exit handler qui sera appelé pour faire le ménage lors d'un SIGINT et utiliser signal pour attraper les SIGTERM, SIGHUP,...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par hizoka Voir le message
    L'idée c'est de nettoyer tous les fichiers "temporaires" créés par le soft si celui ci se fait dégager brutalement.
    et s'il y a une coupure de courant (poweroff), python intercepte la panne et la met en attente pour pouvoir effectuer quelques actions ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Le dossier temporaire est créé via QTemporaryDir et ne s'efface pas si je kill via une commande (utilisation de term ou kill sous linux).
    du coup son nom est partiellement identifiable.

    wiztricks as tu un exemple car je n'arrive pas à exécuter la fonction lors d'un kill ou d'un term ?
    elle est bien appelée lors d'une fermeture normale par contre.

    merci pour vos réponses


    BufferBob => quand ça arrive, on se fout royalement de mon soft... on s’inquiète pour la matériel et on vérifie si on a rien perdu...

    EDIT : c'est la même chose si je crée mon dossier avec tempfile, il n'est pas supprimer en cas de TERM ou KILL
    Sous Kubuntu 20.04

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    et s'il y a une coupure de courant (poweroff), python intercepte la panne et la met en attente pour pouvoir effectuer quelques actions ?
    Dans les salles informatiques, il y a généralement 2 alimentations séparées et un groupe électrogène: çà évite de prendre le risque d'un redémarrage chaotique et des palabres avec utilisateurs, assurances, .... Quand aux utilisateurs, ils ont, en général, un "portable" qui dispose d'une batterie (qui devrait fonctionner).
    Et les autres, ben, ils testent l'intégrité de leur disques avant de redémarrer (ce qui en général nettoie les "vrais" fichiers temporaires) et prient pour que vérifications et nettoyage ne dure pas trop longtemps car les utilisateurs attendent.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je reconnais que c'est une bonne question, et je n'ai que des réponses très partielles. Le peu que je sais se résume à:

    - quand un programme se plante, il est possible qu'il reste en mémoire les sous-processus lancés.

    - quand le courant est coupé, Tout ce qui est en RAM disparait immédiatement. Il subsiste effectivement les fichiers temporaires, mais je ne crois pas qu'ils soient récupérés au relancement de l'application. Une manière d'assurer le coup, c'est d'avoir un onduleur qui déclenche l'arrêt correct du PC en cas de coupure de courant.

    Pour le reste, je supposais que c'était l'OS qui se débrouillait pour faire le ménage à l'arrêt des applications.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    Membre averti Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Points : 388
    Points
    388
    Par défaut

    Par la même occasion j'aimerais savoir si dans cet cas le 'Garbage collector' fonctionne et fais son travail ? ... je veux dire après un arrêt brutal du programme ? Est ce qu'au démarrage d'une nouvelle instance du programme il fait des vérifications sur la précedente instance ? (J'suis aussi un débutant )
    Toute chose dépend de la valeur qu'on lui attribue !

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    bon, je ne me suis pas exprimé comme il aurait fallu manifestement, mon idée n'était pas tant d'envisager la panne matérielle que de réaliser qu'il y a de fait un certain nombre de cas (même "limites") où poser un hook sur la sortie du programme ne suffira pas à faire le job convenablement.

    si le propos est d'intercepter la fin inopinée du programme dans le seul but de virer les fichiers temporaires, pourquoi ne pas prendre le problème dans l'autre sens et "faire place nette" au lancement du programme ?
    le programme se lance, il cherche à dégager tous les fichiers temporaires d'une éventuelle instance précédente, et ensuite peut créer les siens en toute quiétude, non ?

    Citation Envoyé par tyrtamos Voir le message
    je supposais que c'était l'OS qui se débrouillait pour faire le ménage à l'arrêt des applications.
    en RAM oui, la mémoire allouée par le noyau au processus (python) est réquisitionnée et remise dans le pool de mémoire disponible (modulo les buffers/caches justement, qui font qu'on peut éventuellement trouver une trace du programme dans la mémoire physique, encore faut-il aller fouiller /dev/mem ce qui n'est pas trivial), en revanche les fichiers créés sur le disque restent eux, même suite à un crash

    Citation Envoyé par cervo Voir le message
    Par la même occasion j'aimerais savoir si dans cet cas le 'Garbage collector' fonctionne et fais son travail ? ... je veux dire après un arrêt brutal du programme ?
    comme dit juste au dessus, c'est le noyau qui fait le ménage en détruisant le processus, le garbage collector de python n'est plus dans la course à ce stade

    néanmoins sous Linux on est en général assuré que certains répertoires comme /var/tmp/ sont vidés au démarrage de l'OS, donc même en imaginant que les onduleurs lâchent, qu'on ait pas de redondance matérielle etc. on serait pas obligé de s'en foutre royalement de l'application on pourrait quand même faire un truc propre

    ps: par ailleurs je crois me souvenir qu'on ne peut pas intercepter SIGKILL

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par BufferBob Voir le message
    si le propos est d'intercepter la fin inopinée du programme dans le seul but de virer les fichiers temporaires, pourquoi ne pas prendre le problème dans l'autre sens et "faire place nette" au lancement du programme ?
    le programme se lance, il cherche à dégager tous les fichiers temporaires d'une éventuelle instance précédente, et ensuite peut créer les siens en toute quiétude, non
    Pour des fichiers temporaires, le plus simple est d'utiliser la fonctionnalité système via tempfile.
    note: par défaut lorsque ce genre de fichier est crée, l'OS lui donne un nom mais détruit l'entrée. Si on perd le descripteur (fermeture du programme), impossible de le retrouver => avec ces fichiers, on n'a rien à faire que ce soit à la sortie ou au démarrage.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pour des fichiers temporaires, le plus simple est d'utiliser la fonctionnalité système via tempfile.
    note: par défaut lorsque ce genre de fichier est crée, l'OS lui donne un nom mais détruit l'entrée. Si on perd le descripteur (fermeture du programme), impossible de le retrouver => avec ces fichiers, on n'a rien à faire que ce soit à la sortie ou au démarrage.
    exact, c'est le plus simple et sans doute le plus sûr aussi puisqu' avoir des fichiers temporaires avec un nom fixe/prédéfini est souvent considéré comme un risque de sécurité
    malgré tout il semble qu'on puisse fournir à tempfile un "répertoire de base" pour le stockage des fichiers, ce qui devrait pouvoir répondre au besoin du PO quelque soit son cas de figure

Discussions similaires

  1. Cas de nettoyage sur SAP
    Par mozarus dans le forum SAP
    Réponses: 1
    Dernier message: 21/12/2007, 09h10
  2. Lister les softs installés sur un Pc
    Par Jflgb dans le forum C++Builder
    Réponses: 18
    Dernier message: 23/06/2004, 17h34
  3. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  4. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 08h58
  5. Réponses: 2
    Dernier message: 11/07/2002, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo