2013-09-20 2 views
0

Я пишу сценарий захвата поддержки, который связывает все ядра и журналы в системе, относящиеся к нескольким из моих процессов. В случае, если один из процессов находится в середине ядра сбрасывания, это приведет к тому, что мой захват поддержки будет объединен с наполовину написанным ядром.Как определить, является ли процесс в настоящее время сбросом ядра?

Чтобы предотвратить ошибку пользователя, я хочу иметь возможность определить, является ли процесс сбросом ядра. Самое лучшее, что я придумал, это два взлома:

(a) Задайте размер сердечников в моей основной директории в течение 30 секунд и посмотрите, меняется ли какой-либо из них. Если они есть, ядро ​​сбрасывается.

(б) Объединение pgrep и пс -l, увидеть, если процесс имеет WCHAN состояние pipe_w

Есть ли более элегантный и полное доказательство способ сделать это?

Возможно, есть что-то, что можно было бы рассказать, что скажет нам, что что-то является демпинговым ядром?

+0

Если ваше приложение сбрасывает ядро ​​часто настолько, что ваш скрипт, улавливающий его в действии, является проблемой, я думаю, что у вас есть больше проблем, чем иметь дело с случайным усеченным файлом ядра ... – twalberg

ответ

0

Команда lsof будет отображать открытые в настоящее время файлы и процессы, которые имеют к ним ручки. Вы также можете указать ему список только одного файла. Так что в вашем случае, вы можете использовать:

 
lsof "[absolute path to core file]" 

(двойные кавычки необходимы в случае, если путь к файлу содержит пробелы.)

Если файл открыт, Lsof будет выходить с нуля.

+0

Спасибо, это было очень полезно! :) – DasMehdi

Смежные вопросы