Есть ли механизм в Unix (или Linux), чтобы остановить дамп ядра в процессе?

15

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

Есть ли способ остановить генерацию дампа ядра, так как в этом случае это пустая трата?

Например, уничтожит ли -9 процесса дампа ядра прерывание генерации файла ядра?

Очевидно, что если бы мы заранее знали, что нам не нужны дампы ядра, мы могли бы соответствующим образом установить ulimit или использовать различные утилиты управления файлами ядра ОС.

Но этот вопрос о стадии "дамп ядра уже в процессе" ...

(Например, представьте, что я запросчик в /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit и не хочу тратить 5 -6 ТБ дискового пространства :))

Майк Г.
источник
В Linux вы можете отключить создание дампа ядра ... это может быть вариант?
krisFR
Нет - дампы ядра в общем необходимы, но мы просто ищем способ остановить их в тех случаях, когда мы знаем, в чем проблема, не требуя ядра, чтобы сэкономить время / дисковое пространство / и т.д. .... Конечно, мы можем просто удалить ядро, как только оно выполнит дамп (или даже отсоединить его до этого), но нет никаких причин связывать несколько гигабайт пространства на диске, если мы могли бы просто уничтожить дамп ядра ранее.
Майк Г.
Возможно, вы можете использовать «cat / dev / null> <path_to_core>» в скрипте, вызывающем программу, когда выполняется определенное условие, так что, пока существует запись / proc / <pid>, спите каждые несколько секунд и запускайте / dev / null скопировать в основной файл. Это обнулит это. Я не уверен в полном контексте вопроса, но это может сработать.
Schrute
Шруте, это будет иметь тот же эффект, что и отключение ядра, не так ли? Дисковое пространство и системные ресурсы будут по-прежнему потребляться, пока ядро ​​не завершит запись - размер файла просто не будет виден в du или ls.
Майк Г.
Ресурсы да, однако это распространенный метод для работы с большим файлом, таким как файл core / log, а не для остановки PID. Это зависит только от цели.
Schrute

Ответы:

8

Как правило: нет, нет способа надежно убить coredump.

При этом существует возможность (по крайней мере, в Linux) для коммерческого * NIX, вероятно, никак

Возможность заключается в том, что ядро ​​серии 3.x способно прервать запись файла. Одна из возможностей - найти поток, который выполняет дамп, и многократно отправлять SIGKILL, пока он не преуспеет.

Эта серия исправлений устраняет проблему до некоторого уровня.

Другая возможность - использовать альтернативный синтаксис для coredump_pattern. В руководстве сказано, что начиная с версии 2.6.19 вместо шаблона вы можете использовать трубу и программу (с параметрами), которая будет обрабатывать дамп. Следовательно, вы будете иметь контроль над тем, куда будет записан дамп (/ dev / null - очевидный кандидат на ваши бесполезные ядра).

Этот патч также заслуживает небольшого внимания: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

zeridon
источник
Спасибо, Зеридон - это, безусловно, лучший ответ на данный момент.
Майк Г.
Я думаю, что если вы используете механизм трубопровода, вы можете просто выйти без чтения данных канала, если вы знаете, что это не то, что вы хотите сохранить (если только не сломанные каналы не создадут еще одну проблему ... нужно будет это проверить).
Алексис Уилке
0

проверьте эту ссылку, это может быть полезно

https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html

Хамед Шахинеджад
источник
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Том О'Коннор
Спасибо, Хамед, но хотя эта ссылка содержит много интересной информации, я не думаю, что она отвечает на мой вопрос (если я не пропустил ее - я еще не совсем проснулся :))
Майк Г.
-1

Похоже, вы можете запустить ulimit -c (если вы используете bash), чтобы ограничить размер дампа ядра.

Смотрите: /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size

и

http://ss64.com/bash/ulimit.html

Керри
источник
1
Керри, как я сказал в ОП: «Очевидно, что если бы мы заранее знали, что нам не нужны дампы ядра, мы могли бы соответствующим образом установить ulimit или использовать различные утилиты управления файлами ядра ОС». Я пытаюсь увидеть, есть ли способ остановить дамп ядра, когда он уже начался для очень большой задачи (для экономии времени / дискового пространства / ресурсов).
Майк Г.