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).