ulimit: differenza tra limiti hard e soft


87

Qual è la differenza tra limiti hard e soft in ulimit?

Per il numero di file aperti, ho un limite soft di 1024 e un limite hard di 10240. È possibile eseguire programmi aprendo più di 1024 file. A cosa serve il limite soft?


4
Stai parlando ulimit -n? Prova a eseguire una shell con un valore molto basso ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'). Qual è l'output?
Gilles,

Risposte:


77

Un limite rigido può essere aumentato solo dalla radice (qualsiasi processo può abbassarlo). Quindi è utile per la sicurezza: un processo non root non può superare un limite rigido. Ma è scomodo in quanto un processo non root non può avere un limite inferiore rispetto ai suoi figli.

Un limite soft può essere modificato dal processo in qualsiasi momento. Quindi è conveniente fintanto che i processi cooperano, ma non va bene per la sicurezza.

Un tipico caso d'uso per i limiti soft è disabilitare i core dump ( ulimit -Sc 0) mantenendo l'opzione di abilitarli per un processo specifico di cui si sta eseguendo il debug ( (ulimit -Sc unlimited; myprocess)).

Il ulimitcomando shell è un wrapper per la setrlimitchiamata di sistema, quindi è lì che troverai la documentazione definitiva.

Si noti che alcuni sistemi potrebbero non implementare tutti i limiti. In particolare, alcuni sistemi non supportano i limiti per processo sui descrittori di file (Linux lo fa); in caso contrario, il comando shell potrebbe essere no-op.


6
+1 per il caso d'uso dei limiti soft. Limite dimensioni set residenti ( ulimit -m, RLIMIT_RSS) è un esempio di limite che non è più efficace su Linux. Il limite di memoria virtuale ( ulimit -v, RLIMIT_AS) funziona, tuttavia.
Adam Zalcman,

@Gilles, vuoi dire senza riavviare il processo, quando cambiamo il limite morbido, può essere immediatamente effetto?
Ryan,

1
@Ryan Sì, un programma può cambiare il proprio limite soft in qualsiasi momento chiamando setrlimit(nella misura consentita dal limite rigido a meno che non venga eseguito come root ovviamente). La maggior parte dei programmi non ha un comando che consente all'utente di farlo, ma puoi provare a collegarti al programma con un debugger e farlo emettere una setrlimitchiamata, o sotto Linux puoi chiamare prlimit(per il quale non conosco alcuna shell utilità).
Gilles,

1
Ora c'è prlimitanche un'utilità di shell.
telcoM

0

Il limite rigido è per motivi di sicurezza. Per un utente non root, può solo diminuire il limite rigido dal limite fisso attualmente impostato; non può aumentarlo. L'aumento del limite rigido può essere fatto solo dall'utente root (o forse con il privilegio sudo, non ne sono sicuro). Ciò che un utente non root può fare è scegliere un limite (chiamato limite soft) che può essere compreso nell'intervallo [0, limite rigido] per i suoi processi. È il limite morbido che viene visto e preso in considerazione dai processi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.