Soluzione 1:
'ulimit' è un controllo 'per applicazione'... per processo in effetti. Il comando ulimit shell è un comando integrato della shell che imposta il limite per il processo della shell e i suoi figli. Inserisci il comando 'ulimit' nello script che avvia la tua applicazione e il limite verrà impostato solo per questa applicazione.
Soluzione 2:
Nelle distribuzioni basate su systemd puoi anche utilizzare systemd-run (che utilizza indirettamente cgroups) . Ad esempio:
systemd-run --scope -p MemoryLimit=1G firefox
Nota:questo ti chiederà una password ma l'app viene avviata come tuo utente. Non permettere che questo ti induca a pensare che il comando debba essere eseguito con sudo
, perché ciò causerebbe l'esecuzione del comando sotto root, cosa che difficilmente era tua intenzione.
Se non vuoi inserire la password (anzi, perché avresti bisogno di una password per limitare la memoria che già possiedi) , potresti usare --user
opzione, tuttavia affinché funzioni avrai bisogno del supporto cgroupsv2 abilitato, che in questo momento richiede l'avvio con systemd.unified_cgroup_hierarchy
parametro del kernel.