Quels sont les signaux en attente?

9

Lorsque je regarde les limites d'un processus en cours, je vois

Max pending signals       15725
  • Qu'est-ce que c'est?
  • Comment puis-je déterminer une valeur raisonnable pour un service occupé?

En général, je n'arrive pas à trouver une page qui explique quelle est chaque limite. Certains sont assez explicites (fichiers ouverts max), d'autres moins (taille max msgqueue).

Bart van Heukelom
la source
Sur un Linux Arch presque à jour, le noyau 3.14.37-1-lts, zsh, je reçois sigpending 31603. Pourquoi ces limites sont-elles des nombres si étranges (c'est-à-dire pas une puissance de 2)?
Bruce Ediger

Réponses:

6

Selon la page de manuel de sigpending:

sigpending () renvoie l'ensemble des signaux en attente de livraison au thread appelant (c'est-à-dire les signaux qui ont été levés alors qu'ils étaient bloqués).

Il s'agit donc des signaux (sigterm, sigkill, sigstop, ...) qui attendent que le processus sorte de l'état D(sommeil ininterrompu). Habituellement, un processus est dans cet état lorsqu'il attend des E / S. Ce sommeil ne peut pas être interrompu. Même sigkill ( kill -9) ne peut pas et le noyau attend que le processus se réveille (le signal est en attente de livraison si longtemps).

Pour les autres valeurs peu claires, je jetterais un œil dans la page de manuel de limits.conf.

le chaos
la source
Ce sont les pages de manuel pour sigqueueet setrlimitque vous devriez vraiment examiner.
JdeBP
0

Les limites de processus sont contrôlées par setrlimit (2)

Vous pouvez donc consulter sa page de manuel:

RLIMIT_SIGPENDING (depuis Linux 2.6.8)

Spécifie la limite du nombre de signaux pouvant être mis en file d'attente pour l'ID utilisateur réel du processus appelant. Les signaux standard et en temps réel sont comptés afin de vérifier cette limite. Cependant, la limite n'est appliquée que pour sigqueue (3); il est toujours possible d'utiliser kill (2) pour mettre en file d'attente une instance de l'un des signaux qui ne sont pas déjà mis en file d'attente pour le processus.

En règle générale, vous pouvez obtenir les informations les plus détaillées lorsque vous consultez les pages de manuel des appels système. C est la langue maternelle d'UNIX / Linux.

b166er
la source