Em versões recentes do Linux (desde 2.6.36), você pode usar o prlimit comando e chamada de sistema para definir limites de recursos em um processo arbitrário (dadas as permissões apropriadas):
$ prlimit --core=unlimited: --pid $$
$ prlimit --core --pid $$
RESOURCE DESCRIPTION SOFT HARD UNITS
CORE max core file size unlimited unlimited blocks
Você precisa do util-linux-2.21 para o comando prlimit, mas você deve ser capaz de juntar um programa rápido para invocar o chamada do sistema prlimit caso contrário:
int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit);
Se você não tiver uma versão nova o suficiente do Linux (ou de outro SO), a única correção que conheço é conectar-se ao processo com gdb e emitir setrlimit do depurador:
$ gdb -p $PID
...
(gdb) set $rlim = &{0ll, 0ll}
(gdb) print getrlimit(9, $rlim)
$1 = 0
(gdb) print *$rlim
$2 = {-1, -1}
(gdb) set *$rlim[0] = 1024*1024
(gdb) print setrlimit(9, $rlim)
$3 = 0
Isso é para definir ulimit -m , RLIMIT_AS = 9 ; exatamente o mesmo se aplica a ulimit -c ( RLIMIT_CORE , valor numérico 4 no Linux em x86-64). Para "ilimitado", use RLIM_INFINITY , geralmente -1 . Você deve verificar em /usr/include/bits/types.h qual é o tamanho de rlim_t ; Estou assumindo long long (na verdade não assinada, mas usar um tipo assinado torna "ilimitado" -1 mais fácil de ler).