tamanho do arquivo principal com ulimit

6

A minha pergunta provavelmente não está relacionada ao Ubuntu em particular, mas desde a minha área de trabalho executando este SO, cheguei a este fórum.

Estou tentando alterar o tamanho do arquivo principal usando o comando ulimit -c da seguinte forma:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Alterando a limitação:

$ ulimit -c unlimited

Observando o resultado:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Na verdade, o limite é alterado. No entanto, quando abro outro terminal e verifico o valor, ainda vejo valor zero no tamanho do arquivo principal.

Perguntas:

  1. As alterações feitas usando o comando ulimit afetam apenas o processo atual, ou seja, neste caso, o bash ?
  2. Eu inicio um programa do shell como um processo anterior ou posterior. A alteração de ulimit se aplica ao novo processo?
  3. Como posso fazer com que todos os processos do usuário sejam afetados por essa configuração?
por maximb 30.06.2015 / 11:56

1 resposta

6

ulimit é um shell embutido e, portanto, afeta apenas o shell atual e os processos iniciados por esse shell:

$ type ulimit
ulimit is a shell builtin

Em man ulimit :

The  ulimit  utility  shall  set  or report the file-size writing limit
imposed on files written by the shell and its child processes (files of
any  size  may be read). Only a process with appropriate privileges can
increase the limit.

Então, sim, os processos filhos são afetados.

Para definir limites permanentemente ou para todos os processos, edite /etc/security/limits.conf e reinicie. Os exemplos na manpage são razoavelmente bons. Você só precisa adicionar algo como:

username - core unlimited
    
por muru 30.06.2015 / 12:14