Теоретически возможно установить предел из программы с помощью setrlimit()
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/resource.h>
#include <errno.h>
int setNoCores( void )
{
int result;
struct rlimit core_limiter;
core_limiter.rlim_cur = 0; // *no* core
core_limiter.rlim_max = 0;
// Tell the OS no core-files
result = setrlimit( RLIMIT_CORE, &core_limiter );
// Was it OK for you?
if ( result != 0 )
{
switch( errno )
{
case EFAULT: fprintf( stderr, "setNoCores() - EFAULT\n" ); break;
case EINVAL: fprintf( stderr, "setNoCores() - EINVAL\n" ); break;
case EPERM: fprintf( stderr, "setNoCores() - EPERM - No Permissions!\n" ); break;
case ESRCH: fprintf( stderr, "setNoCores() - ESRCH\n" ); break;
}
}
return result;
}
int main( int argc, char **argv )
{
if ( setNoCores() == 0 )
{
printf( "Core Files off\n") ;
}
else
{
printf( "Failed to change limits, core-file generation at default\n" );
}
return 0;
}
Конечно, процессу требуется разрешение для настройки пределов. В зависимости от идентификатора пользователя, запрос может быть отклонен и установлена ошибка EPERM
.
Файлы ядра также контролируются в вашей ОС с помощью команды ulimit
. С параметром -c
это устанавливает максимальный размер основного файла. Размер-число - это количество блоков размером 1024 или 512 байт [ref: справочная страница Solaris (512), Linux '--help' (1024)]. Установка этого параметра в оболочке, из которой выполняется программа, должна ограничивать результат только для тех оболочек, которые являются дочерними процессами.
Для файлов без ядра:
ulimit -c 0
Чтобы снова включить его:
ulimit -c <some large number>
Для более подробной информации, попробуйте ulimit --help
в вашей оболочке.