J'écris du code de gestion des erreurs pour un serveur sur FreeBSD. Pour les erreurs extrêmement graves, je veux éviter la corruption des données en mettant fin immédiatement. C'est simple, exit(3)
. Avant de quitter, je génère mes variables pertinentes qui m'y ont conduit. Cependant, idéalement, cette résiliation serait accompagnée d'un .core
afin que je puisse enquêter pleinement sur ce qui m'a amené à cet état catastrophique (et probablement difficile à reproduire).
Comment puis-je forcer cela à se produire?
kill -QUIT process_id
provoquera un vidage de mémoire d'un processus en cours (en supposant que les limites de ressources le permettent).
Ou voir man 3 abort
pour avoir provoqué le vidage d'un programme.
Ajouté: À partir d'un shell interactif, un programme en cours d'exécution peut être fait pour abandonner avec la touche Quitter, généralement Ctrl+\, qui envoie un SIGQUIT tout comme le plus commun Ctrl+C envoie un SIGINT. Ceci est identique au kill -QUIT…
il est plus simple de taper si vous êtes sur le terminal de contrôle. Voir man 1 stty
si votre clé de sortie par défaut est différente.
This m'a aidé! kill -11
fonctionne toujours pour moi. 11 est SIGSEGV (référence de mémoire non valide)
Vous voudrez peut-être également jeter un œil à gcore (1) ( http://man.freebsd.org/gcore ).
Sur sles12 .. Le code ci-dessous a fonctionné pour moi:
kill -11
Les suggestions précédentes n'ont rien fait.