Por que o ulimit -n não funciona quando chamado dentro de um script?

2

Isso é muito estranho. Estou tentando definir o ulimit para 60000 via meu startup.sh :

#!/bin/bash

ulimit -n 60000
echo "Hello! File Descriptor set"

Eu posso executar isso com ./startup.sh (755 permissões de arquivo) e a linha de eco é impressa, e nenhum erro é mostrado. No entanto, quando eu faço ulimit -n ele ainda mostra 1024 , o que está acontecendo?

O que eu também acho fascinante é que eu posso digitar ulimit -n 60000 no terminal, e então fazer ulimit -n e isso funciona perfeitamente. Por que não posso definir o limite do descritor de arquivo por meio de um script?

Debian 8, 64 bits. Contêiner OpenVZ

    
por John Miller 26.01.2018 / 21:00

1 resposta

2
    ulimits são por processo , não por usuário nem por sistema.

    O comando ulimit está embutido no shell, então permanece dentro do mesmo processo; no entanto, o limite ajustado afeta somente o processo , bem como tudo o que você executa a partir dele (os processos filhos herdam os mesmos limites).

    No entanto, ./startup.sh é executado como um processo separado - portanto, ele ajusta com êxito os limites próprios , mas isso não se propaga magicamente para o pai.

    (Essa é a mesma situação que com cd ou 'exportar - mesmo que você possa usá-los em um script, todos eles alteram os parâmetros do próprio processo do script, não de todo o sistema, e serão esquecidos assim que processo de script sai.)

    Nota: Existe outro comando, prlimit , que permite ajustar os limites de recursos de outro processo (especificado pelo PID). Um script pode alterar o limite de arquivo de seu processo pai assim:

    prlimit --pid=$PPID --nofile=4096
    
        
por 26.01.2018 / 22:11