tamanho do arquivo principal com ulimit


12

Minha pergunta provavelmente não está relacionada ao Ubuntu em particular, mas desde que minha área de trabalho executando este sistema operacional, eu vim a este fórum.

Estou tentando alterar o tamanho do arquivo principal usando o ulimit -ccomando da seguinte maneira:

$ 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

De fato, o limite foi alterado. No entanto, quando abro outro terminal e verifico o valor, ainda vejo o valor zero no tamanho do arquivo principal.

Questões:

  1. As alterações feitas usando o ulimitcomando afetam apenas o processo atual, ou seja, neste caso, o bash?
  2. Eu inicio um programa a partir do shell como um processo anterior ou em segundo plano. A ulimitalteração se aplica a um novo processo?
  3. Como posso garantir que todos os processos do usuário sejam afetados com esta configuração?

Respostas:


10

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

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

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

Para definir limites permanentemente ou para todos os processos, edite /etc/security/limits.confe reinicie. Os exemplos na página de manual são bastante bons. Você só precisa adicionar algo como:

username - core unlimited

Obrigado. Por manpages.ubuntu.com/manpages/bionic/man1/ulimit.1posix.html , ulimittambém é um comando externo além de ser um comando interno do bash?
Tim

@ Tim citando a página à qual você vinculou: "Como o ulimit afeta o ambiente de execução atual do shell, ele sempre é fornecido como um built-in regular do shell".
Muru
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.