Há alguns meses, escrevi um conjunto de scripts bash utilizando o tmux para criar um IDE simples em um servidor AIX 7.1. Há um bug em um dos meus scripts que às vezes gera processos do usuário muito rapidamente até o limite definido por ulimit. Isso acontece muito raramente (cerca de uma vez por mês), e já passei várias horas malsucedidas rastreando esse bug, então decidi que, por enquanto, eu poderia simplesmente definir meu limite de processo de usuário flexível para algo menor que o limite rígido ( por exemplo, 100 em vez de 1024) para que, quando meu bug se manifestar novamente, não ocorra um impacto perceptível no desempenho de outros usuários no servidor. Infelizmente, "ulimit -Su 100" não parece funcionar no bash no AIX 7.1, mas funciona em ksh. Eu executei a seguinte solução alternativa:
Tornou o ksh o shell padrão:
$ chsh [username] /usr/bin/ksh
Escrevi o seguinte para ~ / .kshrc:
ulimit -Su 100 # works in ksh, but not in bash
/bin/bash -il # start bash as an interactive login shell
exit # once bash exits, exit from ksh, too
Portanto, toda vez que eu criar um shell, o ksh definirá o limite do processo de usuário flexível e iniciará o bash como um shell de login interativo (ainda quero que o ~ / .bash_profile seja originado). Agora eu tenho que saber, os limites de processo do usuário definidos no ksh ainda serão aplicados em subshells do bash? No subshell de bash de nível superior, eu corri o seguinte:
$ ulimit -Sa
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) unlimited
pipe size (512 bytes, -p) 64
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
Como você pode ver, o limite do processo do usuário está definido como 1024.
Outra grande preocupação é saber se o limite definido em ksh incluirá ou não processos criados em sessões tmux em sub-unidades bash.
outro detalhe:
Sempre que eu crio um novo painel no tmux, tenho certeza de que o ksh é invocado, o ~ / .kshrc é originado e o bash é iniciado, assim como o normal. Eu acredito que este é o caso, porque o título de cada painel tmux recém-criado é "ksh" (o título padrão de um painel tmux é o nome do processo atual em primeiro plano), mas eu sou apresentado com um prompt bash em vez de um prompt do ksh.
Isso ficou um pouco demais, então suponho que omitirei mais detalhes a menos que seja solicitado.
Editar 1: comportamento estranho
Veja o que acontece quando tento obter o limite do processo do usuário com "ulimit -Su" (sem args), com e sem usar treliça:
$ truss ulimit -Su 2>| truss.out
100
$ ulimit -Su
1024
Talvez eu esteja usando a ferramenta errada, mas isso parece estranho. Esses comandos foram executados dentro do tmux.
Editar 2: informações adicionais
Estes comandos foram executados a partir de um prompt bash regular - sem subshells ou tmux.
$ truss ksh -c "ulimit -Su 100" 2>&1 | grep limit
getrlimit64(9, 0x2FF1B988) = 0
setrlimit64(9, 0x2FF1B988) = 0
$ truss bash -c "ulimit -Su 100" 2>&1 | grep limit
appulimit(1005, 0) = 0x2001C000
bash: line 0: ulimit: max user processes: cannot modify limit: A system call received a parameter that is not valid.