web-dev-qa-db-fra.com

Le programme C ++ plante avec EXIT CODE: 9 (SIGKILL)

Mon programme d'application se bloque avec EXIT CODE: 9 (SIGKILL)

Je n'exécute jamais aucune commande telle que 'kill -9 (pid)' ou 'pkill (nom du processus)' qui puisse tuer le processus en cours.

Où dois-je commencer le débogage dans ce cas?

  1. J'ai essayé de vider la trace de la pile lorsque le programme se bloque, mais j'ai trouvé que le SIGKILL ne peut pas être intercepté pour la gestion des erreurs.

  2. Le programme utilise MPI et s'exécute dans des environnements de cluster. Il meurt après environ 1 heure de son exécution.

Y a-t-il des causes COMMUNES qui peuvent entraîner une exception SIGKILL?

(Il fonctionne sous Linux; cent os 7)

12
syko

@ Je réponds à ma propre question afin que quelqu'un puisse obtenir de l'aide plus tard.

L'exception a été provoquée par OutOfMemory.

Le processus alloue trop de mémoire en exerçant des pressions sur le système d'exploitation. L'OS a un tueur à gages, oom-killer , qui tue ces processus pour la stabilité du système. Le tueur à gages utilise des balles appelées SIGKILL.

Cependant, puisque SIGKILL est invisible (il ne peut pas être capturé et géré par l'application), pour certains débutants dont moi, il n'est pas toujours facile de comprendre la véritable raison de l'accident.

Une bonne nouvelle est que lorsque le tueur à gages tue votre processus, il enregistre toujours son action dans/var/log/messages.

Selon la configuration de votre système d'exploitation, oom-killer peut ne pas enregistrer de message du tout. Dans ce cas, vous pouvez également le configurer. Recherchez la configuration de rsyslog dans google.

Trouver quel processus a été tué par le tueur Linux OOM

20
syko