2011-10-27 13 views
5

Questa è una domanda di intervista.Come trovare il motivo di un processo morto senza file di registro su unix?

Uno sviluppatore ha avviato un processo. Ma quando un cliente desidera utilizzare il processo, ha scoperto che il processo non era in esecuzione. Lo sviluppatore ha effettuato l'accesso e ha trovato che il processo è morto. Come può lo sviluppatore sapere cosa c'è che non va?

Follow-up: un processo in esecuzione che dovrebbe scrivere registri su un file. Ma non ci sono log nel file. Come può lo sviluppatore capire cosa sta succedendo nel processo?

Penso: Se il programma può essere rieseguito, userò gdb per tracciare il processo. In caso contrario, controllare il file di output dal processo (il programma applicativo). o, aggiungere stampa al codice.

Ma, ci sono altri modi per farlo facendo riferimento ad alcune informazioni generate dal sistema operativo?

+0

Che dire di 'core dump' ??? –

+0

Voting to close: hai già dato una soluzione e non ci sarà un'unica risposta giusta per la domanda "ci sono altri modi per farlo?" Non può che incitare alla discussione estesa. –

risposta

-1

... utilizzare un debugger come gdb ...

+0

L'OP ha già menzionato questo. Puoi spiegare perché questa è l'unica risposta? –

+0

Prima ho avuto una risposta diversa, ma poi mi sono reso conto che l'OP rispondeva alla sua stessa domanda ... e sono d'accordo con la sua valutazione – Tilo

4

ci sono altri modi per farlo facendo riferimento alcune informazioni generate da OS?

core dump è un'opzione.

3

A volte i programmi non creano core dump. In questo caso, è utile conoscere il codice di uscita del software.

Quindi è possibile utilizzare questo script di seguito per avviare il software e registrare il suo stato di uscita per trovare il motivo di uscita.

Esempio:

#!/bin/bash 
./myprogram 

#get exit code 
exitvalue=$? 

#log exit code value to /var/log/messages 
logger -s "exit code of my program is " $exitvalue 
5

Se avete lo spazio su disco e la potenza della CPU di riserva, è possibile lasciare strace seguendo il programma per catturare la sequenza che porta per uscire.

Una possibile causa se il programma è morto senza lasciare traccia è la memoria esaurita (OOM) killer. Questo lascerà un messaggio nel log del kernel se uccide il tuo processo.

Dalla stessa risposta, è possibile modificare process accounting per fornire alcuni indizi indicando il codice di uscita insieme al tempo di uscita.

Problemi correlati