2011-10-27 5 views
5

To jest pytanie do wywiadu.Jak znaleźć przyczynę martwego procesu bez pliku dziennika w systemie UNIX?

Deweloper rozpoczął proces. Ale gdy klient chce skorzystać z procesu, stwierdził, że proces nie był uruchomiony. Deweloper zalogował się i stwierdził, że proces się zakończył. Jak deweloper może wiedzieć, co jest nie tak?

Kontynuacja: uruchomiony proces, który ma zapisywać dzienniki do pliku. Ale w pliku nie ma żadnych dzienników. W jaki sposób deweloper może dowiedzieć się, co dzieje się w trakcie procesu?

Myślę, że: Jeśli program można ponownie uruchomić, użyję gdb do śledzenia procesu. Jeśli nie, sprawdź plik wyjściowy z procesu (program aplikacji). lub dodaj wydruk do kodu.

Ale czy są inne sposoby na to, odwołując się do informacji wygenerowanych przez system operacyjny?

+0

Co z 'core dump' ??? –

+0

Głosowanie za zamknięciem: Podałeś już rozwiązanie i nie będzie jednej prawidłowej odpowiedzi na pytanie "czy są inne sposoby, aby to zrobić?" Może wywołać tylko rozszerzoną dyskusję. –

Odpowiedz

-1

... jak używać debuggera gdb ...

+0

PO już o tym wspomniał. Czy możesz podać uzasadnienie, dlaczego jest to jedyna odpowiedź? –

+0

Najpierw miałem inną odpowiedź, ale potem zdałem sobie sprawę, że PO odpowiedział na własne pytanie ... i zgadzam się z jego oceną – Tilo

4

istnieją inne sposoby, aby zrobić to odnosząc pewne informacje wygenerowane przez OS?

core dump to jedna opcja.

3

Czasami programy nie tworzą zrzutów rdzenia. W takim przypadku pomocny może być kod wyjściowy oprogramowania.

Możesz użyć poniższego skryptu, aby uruchomić oprogramowanie i zalogować jego status wyjścia, aby znaleźć przyczynę wyjścia.

Przykład:

#!/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

Jeśli masz wolną przestrzeń na dysku i mocy procesora, można pozostawić strace następujący program złapać sekwencję prowadzące do wyjść.

Jedną z możliwych przyczyn śmierci programu bez pozostawienia śladu jest brak pamięci (OOM) killer. To pozostawi wiadomość w dzienniku jądra, jeśli zabije twój proces.

Z tej samej odpowiedzi można zmodyfikować process accounting, aby podać pewne wskazówki, informując o kodzie wyjścia wraz z czasem zakończenia.