Ограничения для каждого процесса, а не для пользователя или системы.
Команда ulimit
встроена в оболочку, поэтому она остается в том же процессе; однако скорректированное ограничение влияет только на этот процесс, а также на все, что вы из него запускаете (дочерние процессы наследуют те же ограничения).
Тем не менее, он ./startup.sh
работает как отдельный процесс - поэтому он успешно настраивает свои собственные пределы, но это волшебным образом не распространяется вверх до его родителя.
(Это та же самая ситуация, что и с cd
или `export - хотя вы можете использовать их в сценарии, они все изменяют параметры самого процесса сценария, а не всей системы, и будут забыты после завершения процесса сценария.)
Примечание: есть другая команда, prlimit
которая позволяет вам настроить ограничения ресурсов другого процесса (заданного PID). Сценарий может изменить ограничение файла своего родительского процесса следующим образом:
prlimit --pid=$PPID --nofile=4096