Как найти причину мертвого процесса без файла журнала в Unix? - PullRequest
6 голосов
/ 27 октября 2011

Это вопрос интервью.

Разработчик запустил процесс.Но когда клиент хочет использовать процесс, он обнаруживает, что процесс не запущен.Разработчик вошел в систему и обнаружил, что процесс умер.Как разработчик может узнать, что случилось?

Отслеживание: запущенный процесс, который должен записывать логи в файл.Но в файле нет логов.Как разработчик может выяснить, что происходит в процессе?

Я думаю: если программу можно будет перезапустить, я буду использовать gdb для отслеживания процесса.Если нет, проверьте выходной файл из процесса (прикладная программа).или добавьте печать к коду.

Но есть ли другие способы сделать это, ссылаясь на некоторую информацию, генерируемую ОС?

Ответы [ 4 ]

5 голосов
/ 27 октября 2011

Если у вас есть место на диске и запасная мощность процессора, вы можете оставить strace после программы, чтобы перехватить последовательность, ведущую к выходу.

Одна из возможных причин, если программаумер, не оставив никаких следов - убийца нехватки памяти (OOM) .Это оставит сообщение в журнале ядра, если оно убьет ваш процесс.

Исходя из того же ответа, учет процессов можно изменить, чтобы предоставить некоторые подсказки, сообщив вам код выхода вместе свремя выхода.

4 голосов
/ 27 октября 2011

Существуют ли другие способы сделать это, ссылаясь на некоторую информацию, генерируемую ОС?

core dump - это один из вариантов.

3 голосов
/ 27 октября 2011

Иногда программы не создают дампов ядра.В этом случае может помочь знание кода выхода вашего программного обеспечения.

Таким образом, вы можете использовать этот скрипт ниже, чтобы запустить ваше программное обеспечение и зарегистрировать его состояние выхода, чтобы найти причину выхода.

Пример:

#!/bin/bash
./myprogram

#get exit code
exitvalue=$?

#log exit code value to /var/log/messages
logger -s "exit code of my program is " $exitvalue
0 голосов
/ 27 октября 2011

... используйте отладчик типа gdb ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...