Différence entre ulimit -n et / proc / $ PID / limites

Sous Linux, il existe une limite de file ouverte. Je peux utiliser ulimit -n pour voir la limite de file ouvert, qui est 1024 par défaut. Ensuite, je peux aussi voir par process ouvrir le file soft / hard limite en regardant / proc / $ PID / limites. Je vois doux = 1024 et dur = 4096.

Je me request quelle est la différence entre ces deux sorties?

En outre, setRlimit() et getRlimit() s'appliquent-ils à l'échelle du système ou par process?

ulimit -n définit la limite souple par défaut; vous pouvez append l'option -H pour afficher / définir la limite ssortingcte.

Pour la plupart, les limites douces et dures se comportent comme ceci:

  1. les process de root (en fait, tout process avec CAP_SYS_RESOURCE ) peut augmenter ou diminuer n'importe quelle limite sur n'importe quel process.
  2. les process de tout user peuvent réduire toute limite sur les autres process appartenant à cet user.
  3. les process de n'importe quel user peuvent élever la limite molle jusqu'à la limite ssortingcte des process appartenant à cet user.
  4. Si un process tente de dépasser sa limite souple, la tentative échouera.

Ainsi, les limites ssortingctes fonctionnent comme un plafond sur les limites douces (sauf pour la racine, qui normalement peut faire n'importe quoi).

Il y a une exception: Une limite CPU douce envoie un signal SIGXCPU . Un process peut choisir d'ignorer cela, ou de passer du time à faire le nettoyage, etc. Une fois que la limite CPU est dépassée, le kernel envoie SIGKILL – qui n'est ni captable, ni manipulable, ni ignorable. Dans ce cas, la limite molle fonctionne comme un avertissement: «vous n'avez plus de time processeur, finissez et quittez rapidement, sinon! et la limite dure est le "ou bien".

La plupart sont par process, mais quelques-uns (tels que RLIMIT_NPROC ) sont par user. La page de manuel getrlimit (2) spécifie pour chaque limite.