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?
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?
Risposte:
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 ulimit
comando shell è un wrapper per la setrlimit
chiamata 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.
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.
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 setrlimit
chiamata, o sotto Linux puoi chiamare prlimit
(per il quale non conosco alcuna shell utilità).
prlimit
anche un'utilità di shell.
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.
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?