Включить ядро /аварийные дампы программно

Я знаю, что могу запустить "Ulimit -c неограниченно"

В оболочке включить дампы ядра для текущего пользователя. Что мне интересно, как я могу сделать это программно из C?

Я вижу, что есть вызов ulimit, но он устарел в пользу get/setrlimit. Я хочу знать, что такое эквивалентный вызов setrlimit, который позволит генерировать аварийные дампы?

Ответ 1

Я нашел рабочее решение. Теперь создаются основные файлы.

struct rlimit core_limit;
core_limit.rlim_cur = RLIM_INFINITY;
core_limit.rlim_max = RLIM_INFINITY;

if (setrlimit(RLIMIT_CORE, &core_limit) < 0)
    fprintf(stderr, "setrlimit: %s\nWarning: core dumps may be truncated or non-existant\n", strerror(errno));

Кредит идет здесь: http://adamrosenfield.com/blog/2010/04/23/dumping-core/

Ответ 2

если вы хотите проверить свой текущий лимит для вашего процесса, чем

struct rlimit  v;   //you can decelare any variable

getrlimit(RLIMIT_CORE, &v);

printf("softlimit=%d   hardlimit=%d  \n",v.rlim_cur,v.rlim_max);

если вы хотите установить новый лимит, чем использовать приведенный ниже код

/////////////////////установленный предел ////////////////////////////////

давайте сделаем это проще

struct rlimit v;
v.rlim_cur = 0 ;  //if you do not want the core dump file

/*  v.rlim_cur=RLIM_INFINITY;    //set maximum soft limit of the file(unlimited) */

v.rlim_max = RLIM_INFINITY;    //for reference to the soft limit(unlimited)

setrlimit(RLIMIT_CORE, &v);

Значение rlim_cur находится в диапазоне от 0 до бесконечности, что означает, что дампы ядра будут созданы и урезаны до указанного размера. Это рискует создать неполный дамп ядра