O que unlimit e limit faz no contexto do csh?

2

Estou executando um script csh que chama unlimit e limit antes de executar um modelo científico. O script parece algo assim (truncado por brevidade):

#!/bin/csh -f
# ...
unlimit
limit
/usr/bin/time $BLD/$EXEC # Where '$BLD/$EXEC' is the path to the model
date
exit

A execução do script produz o seguinte erro:

unlimit
unlimit: memorylocked: Can't remove limit
unlimit: maxproc: Can't remove limit
unlimit: openfiles: Can't remove limit

Verificando ulimit do Bash:

$ 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) 63711
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) 63711
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Tentando unlimit (sem especificar nenhum recurso) do csh:

$ sudo csh
# unlimit
unlimit: memorylocked: Can't remove limit
unlimit: maxproc: Can't remove limit
unlimit: openfiles: Can't remove limit

A saída de limit de csh e a tentativa de unlimit com recursos especificados:

$ sudo csh
# whoami
root
# limit
cputime         unlimited
filesize        unlimited
datasize        unlimited
stacksize       8192 kbytes
coredumpsize    0 kbytes
memoryuse       unlimited
memorylocked    64 kbytes
maxproc         63711
openfiles       1024
# unlimit openfiles
unlimit: openfiles: Can't remove limit
# unlimit memorylocked
unlimit: memorylocked: Can't remove limit

Estou executando o Ubuntu 14.04:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

Acredito que a execução unlimit deva remover todas as limitações de recursos antes de executar o modelo, e a saída de limit deve verificar isso. Por que o usuário root não conseguiria remover as limitações? O unlimit deveria ser executado apenas como root?

    
por Whymarrh 09.02.2015 / 01:01

2 respostas

2

O ulimit está tentando aumentar o uso máximo desses recursos acima do configurado para todo o sistema pelo sysctl. Além disso, na verdade, não é possível configurar o Linux com um número ilimitado de alguns recursos, como arquivos abertos.

Note que a não limitação de todos os recursos não é uma boa idéia - você realmente deseja alguns gigabytes de core dump caso um modelo falhe? Aumente somente os recursos que estão apresentando um gargalo para a execução do modelo. Como você pode executar o modelo com êxito, isso sugere que os recursos disponíveis em sua máquina moderna podem ser significativamente maiores do que na máquina para a qual o código foi originalmente escrito.

    
por 09.02.2015 / 06:10
0

Veja a página de manual csh , que documenta os limit e unlimit builtins. O unlimit é remover todo o limite, e o limit é a impressão dos limites atuais. Eu estou supondo que quem escreveu isso correu em algum tipo de problema de limite de recursos em algum momento e colocá-los como um meio defensivo para garantir que não havia limites e imprimir o que eles eram, se houvesse algum.

    
por 09.02.2015 / 02:57