2

У меня проблема, когда процесс Python сталкивается с ошибкой сегментации, но не создает файл ядра.

Ниже приведен игрушечный пример, который не создает файл ядра в следующих дистрибутивах:

  • Ubuntu 12.10
  • Fedora 18

но производит основные файлы в следующих дистрибутивах:

  • Научный Linux 6
  • Mac OS X

Репродукция:

$ python -c 'import time; time.sleep(120)'&    
$ kill -abrt $!   [1]+   
Aborted                 python -c 'import time; time.sleep(120)'  
$ ls core*   ls: cannot access core*: No such file or directory  

Однако, если я отправляю аналогичный сигнал в sleep экземпляр, я получаю файл ядра:

$ sleep 120 &  
$ kill -abrt $!  
[1]+  Aborted                 (core dumped) sleep 120  
$ ls core*  
core.8603  

На моей коробке Fedora 18 вот мой /proc/sys/kernel/core_pattern:

$ cat /proc/sys/kernel/core_pattern   
core

И я установил следующее:

$ ulimit -c  
unlimited

Это воспроизводимо независимо от того, запущена служба abrtd или нет.

Я почти уверен, что пропустил некоторую базовую конфигурацию, но я не знаю что. Спасибо!

РЕДАКТИРОВАТЬ: Это может быть решено с помощью:

$ echo 1 >/proc/sys/fs/suid_dumpable

1 ответ1

1

ТЛ; др

$ echo 1 >/proc/sys/fs/suid_dumpable

(или эквивалент в /etc/sysctl.conf для сохранения изменений при перезагрузке)

дольше

В моем сценарии я использовал setcap для установки определенных возможностей в моем процессе Python, например, чтобы разрешить использование необработанных сокетов без необходимости быть пользователем root. Если эта опция включена, вам нужно быть пользователем root, чтобы получить дамп ядра, или использовать указанную выше команду, чтобы явно сказать ядру, что пользователи без полномочий root могут получить дампы ядра, к которым они сами могут получить доступ.

(настройка 2 по-прежнему включит дампы ядра в этой ситуации, но указанные дампы ядра будут доступны только пользователю root).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .