ulimits sind pro Prozess, nicht pro Benutzer oder pro System.
Der ulimit
Befehl ist in die Shell integriert und bleibt daher im selben Prozess. Das angepasste Limit wirkt sich jedoch nur auf diesen Prozess aus und auf alles, was Sie von ihm ausführen (untergeordnete Prozesse erben dieselben Limits).
Allerdings ./startup.sh
läuft als separaten Prozess - also erfolgreich stellt es seine eigenen Grenzen, aber diese nicht auf magische Weise nach oben, um seine Eltern zu verbreiten.
(Dies ist die gleiche Situation wie beim cd
oder beim Exportieren - obwohl Sie diese in einem Skript verwenden können, ändern sie alle Parameter des eigenen Prozesses des Skripts, nicht des gesamten Systems, und werden vergessen, sobald der Skriptprozess beendet ist.)
Hinweis: Es gibt einen weiteren Befehl, prlimit
mit dem Sie die Ressourcengrenzwerte eines anderen Prozesses (durch PID angegeben) anpassen können. Ein Skript kann das Dateilimit seines übergeordneten Prozesses folgendermaßen ändern:
prlimit --pid=$PPID --nofile=4096