Как получить дамп ядра из службы, запущенной xinetd в Ubuntu Precise

Я хочу отладить службу, которая не работает с SIGPIPE. Поэтому я установил обработчик сигнала для SIGPIPE и вызвал в нем abort(), чтобы получить дамп ядра.

Но я ничего не получаю. Я установил sysctl -w kernel.core_pattern=/tmp/core, чтобы получить core в tmp, и я установил как /etc/security/limits.conf, так и ulimit -c unlimited.

Итак, как я могу получить core?

Мои файлы xinetd-service выглядят следующим образом:

service netmaumau
{
    socket_type = stream
    protocol    = tcp
    port        = 8899
    type        = UNLISTED
    flags       = KEEPALIVE
    disable     = no
    wait        = yes
    user        = heiko
    instances   = 1
    cps         = 1 10
    server      = /long/path/to/nmm-server
    server_args = -a
    log_on_success = PID HOST EXIT
    log_on_failure = HOST
}

person Heiko Schäfer    schedule 08.01.2015    source источник
comment
Проверьте с getrlimit() значением RLIMIT_CORE в Вашем сервисе (действительно ли оно безлимитно).   -  person kestasx    schedule 08.01.2015
comment
Спасибо, добавление struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY }; setrlimit(RLIMIT_CORE, &rl); было хитростью :)   -  person Heiko Schäfer    schedule 08.01.2015


Ответы (1)


добавление

struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY }; 
setrlimit(RLIMIT_CORE, &rl);

решил проблему

person Heiko Schäfer    schedule 08.01.2015