Para resolver o problema em https://unix.stackexchange.com/a/446428/674 , segui https://stackoverflow.com/a/17483998/156458 , mas ele não define o tamanho do limite do arquivo principal?
$ sudo sh -c "ulimit -c 1024 && exec su t"
$ ulimit -c
0
Dessa forma, altera o tamanho do limite do arquivo principal temporariamente apenas para o shell atual ou permanentemente para todos os shells de todos os usuários ou do usuário atual?
Atualização: A postagem original https://stackoverflow.com/a/17483998/156458 e https://unix.stackexchange.com/a/238413/674 e https://unix.stackexchange.com/a/169035/674 todos recomendados usando
sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
. Mas ambosulimit -c 1024
eexec su $LOGNAME"
afetam apenas o shell criado porsudo
, então qual é o objetivo do comando?exec su $LOGNAME"
também não faz nada significativo para usar o limite alterado.
Observação: estou me concentrando no motivo pelo qual a maneira acima não funciona, embora existam outras maneiras de contornar o problema:
Devo colocar o comando que usa o novo valor limite dentro do shell executado pelo sudo
por exemplo
$ sudo sh -c "ulimit -c 1024 && sleep 100" ^\Quit $ ls core
- Eu também poderia tentar modificar
/etc/security/limits.conf
.
De acordo com a página de manual,
ulimit
"fornece controle sobre os recursos disponíveis para o shell e para os processos iniciados por ele". Portanto, oulimit
valor é válido para o shell atual.Você está invocando
ulimit
em um subshell e, quando ele termina, você volta aoulimit
valor padrão.O
ulimit
comando funciona para o shell que o chama e para seus descendentes.O comando
su
terá o limite que você configurou. O shell pai não é afetado.Acho que você está faltando (ou não está reconhecendo)
/etc/security/limits.conf
Aqui está o modelo do Suse Linux Enterprise Server 11.4 e também como defino globalmente o limite de tamanho da pilha como ilimitado versus o padrão de 8 KB.Isso é do SLES, o
limits.conf
nome e o local podem ser diferentes dependendo da sua distribuição do linux. Definir os valores aqui será global e estará em vigor para tudo/todos, em vez de usarulimit
, o que seria limitado ao escopo da janela do shell, conforme descrito.Esteja avisado, definir alguns itens incorretamente pode impedir que você faça login no sistema
Eu gostaria de abordar a parte:
Fiz alguns experimentos e descobri que depois de executar
ulimit -c 1024
de fato, modifique os valores limite, mas apenas dentro do shell sobsudo
o shell original;exec su $LOGNAME"
me dará um shell sobsu
osudo
shell original esu $LOGNAME"
redefine os limites para os valores padrão para user$LOGNAME
.Portanto, o comando sugerido pelos links não funciona.
para o tamanho do arquivo principal:
para número de arquivos abertos, para refazer o experimento em https://unix.stackexchange.com/a/238413/674 , mas com um valor limite diferente para definir como
Sua própria resposta agora contém as informações que já seriam necessárias na pergunta:
Seu sistema tem uma configuração incomum.
No Solaris, você tem os seguintes limites e o conjunto de recursos POSIX:
No Linux, você tem os seguintes limites típicos:
Como você vê, o hard limit é muito maior que o seu. Esta é a razão pela qual ninguém poderia entender seus problemas.
Como um usuário comum tem permissão para aumentar os limites suaves para os limites rígidos, a solicitação em sua pergunta não precisaria de privilégios de root.