Het ulimit commando verandert alleen de limieten voor de huidige shell en zijn kinderen, en sudo ulimit creëert een root shell, past zijn limieten aan, en sluit dan af (en heeft dus, voor zover ik kan zien, geen echt effect).
Om 12288 te overschrijden, moet je de kernel’s kern.maxfiles en kern.maxfilesperproc parameters aanpassen, en ook (tenminste volgens  deze blog entry , wat een samenvatting is van  deze discussie ) een launchd limiet. Je kunt launchctl limit gebruiken om deze allemaal tegelijk aan te passen: 
sudo launchctl limit maxfiles 1000000 1000000
Om dit permanent te maken (dus niet te resetten als je herstart), maak je /etc/launchd.conf met daarin: 
limit maxfiles 1000000 1000000
Dan kun je ulimit gebruiken (maar dan zonder de sudo) om je proceslimiet aan te passen. 
Als dit het niet doet, kan het zijn dat je tegen grootte limieten aanloopt in de kernel. Als  uw model het ondersteunt , kan het opstarten van de kernel in  64-bit modus  helpen.