Existe-t-il un moyen d'obtenir un vidage de mémoire (ou quelque chose de similaire) pour un processus sans réellement tuer les processus? J'ai un processus python multithread exécuté sur un système embarqué. Et je veux pouvoir obtenir un instantané du processus dans des conditions normales (c'est-à-dire avec les autres processus requis pour être en cours d'exécution), mais je n'ai pas assez de mémoire pour connecter gdb (ou l'exécuter sous gdb) sans le processus python étant le seul à courir.
J'espère que cette question est logique.
Réponses:
L'astuce habituelle est d'avoir quelque chose (peut-être un signal comme
SIGUSR1
) déclencher le programmefork()
, puis l'enfant appelleabort()
pour se faire vider le noyau.et lors de l'initialisation
Utilisé de cette façon,
fork
ne consommera pas beaucoup de mémoire supplémentaire car presque tout l'espace d'adressage sera partagé (c'est aussi pourquoi cela fonctionne pour générer le vidage de mémoire).Il était une fois cette astuce utilisée avec un programme appelé
undump
pour générer un exécutable à partir d'un core dump pour sauvegarder une image après une initialisation complexe;emacs
permet de générer une image préchargée à partir detemacs
.la source
Vous pouvez essayer d'utiliser
gcore
. C'est une option pour toi?la source