Comment trouver la raison d’un processus mort sans fichier journal sur Unix?

Ceci est une question d’entrevue.

Un développeur a lancé un processus. Mais lorsqu’un client souhaite utiliser le processus, il a constaté que le processus n’était pas en cours d’exécution. Le développeur s’est connecté et a trouvé le processus mort. Comment le développeur peut-il savoir ce qui ne va pas?

Suivi: processus en cours qui est censé écrire des journaux dans un fichier. Mais il n’y a pas de journaux dans le fichier. Comment le développeur peut-il déterminer ce qui se passe dans le processus?

Je pense: Si le programme peut être ré-exécuté, je vais utiliser gdb pour suivre le processus. Sinon, vérifiez le fichier de sortie du processus (le programme d’application). ou ajoutez une impression au code.

Mais y a-t-il d’autres façons de le faire en se référant à certaines informations générées par le système d’exploitation?

Si vous disposez de l’espace disque et de la puissance de processeur disponible, vous pouvez laisser strace suivre le programme pour intercepter la séquence menant à la sortie.

Une cause possible si le programme est mort sans laisser de trace est le tueur hors mémoire (OOM) . Cela laissera un message dans le journal du kernel s’il tue votre processus.

A partir de la même réponse, la comptabilisation des processus peut être modifiée pour vous fournir des indices en vous indiquant le code de sortie avec l’heure de sortie.

Y a-t-il d’autres moyens de le faire en se référant à certaines informations générées par le système d’exploitation?

core dump est une option.

Parfois, les programmes ne créent pas de vidages de mémoire. Dans ce cas, il peut être utile de connaître le code de sortie de votre logiciel.

Vous pouvez donc utiliser ce script ci-dessous pour démarrer votre logiciel et enregistrer son statut de sortie pour trouver sa raison de sortie.

Exemple :

 #!/bin/bash ./myprogram #get exit code exitvalue=$? #log exit code value to /var/log/messages logger -s "exit code of my program is " $exitvalue 

… utiliser un débogueur comme gdb …