Was sind ausstehende Signale?

9

Wenn ich mir die Grenzen eines laufenden Prozesses anschaue, sehe ich

Max pending signals       15725
  • Was ist das?
  • Wie kann ich einen vernünftigen Wert für einen ausgelasteten Dienst ermitteln?

Im Allgemeinen kann ich anscheinend keine Seite finden, auf der die einzelnen Grenzwerte erläutert werden. Einige sind ziemlich selbsterklärend (max. Geöffnete Dateien), andere weniger (max. Msgqueue-Größe).

Bart van Heukelom
quelle
Auf einem fast aktuellen Arch Linux, Kernel 3.14.37-1-lts, zsh, bekomme ich sigpending 31603. Warum sind diese Grenzen so seltsame Zahlen (dh keine Potenz von 2)?
Bruce Ediger

Antworten:

6

Laut der Handbuchseite von sigpending:

sigpending () gibt den Satz von Signalen zurück, die zur Übermittlung an den aufrufenden Thread anstehen (dh die Signale, die während des Blockierens ausgelöst wurden).

Es sind also die Signale (sigterm, sigkill, sigstop, ...) gemeint, die warten, bis der Prozess aus dem D(ununterbrochenen Schlaf-) Zustand herauskommt . Normalerweise befindet sich ein Prozess in diesem Zustand, wenn er auf E / A wartet. Dieser Schlaf kann nicht unterbrochen werden. Sogar sigkill ( kill -9) kann nicht und der Kernel wartet, bis der Prozess aufwacht (das Signal steht so lange für die Zustellung aus).

Für die anderen unklaren Werte würde ich einen Blick in die Handbuchseite von werfen limits.conf.

Chaos
quelle
Es sind die Handbuchseiten für sigqueueund setrlimitdie Sie sich unbedingt ansehen sollten.
JdeBP
0

Prozessgrenzen werden durch setrlimit (2) gesteuert.

So können Sie in seine Manpage schauen:

RLIMIT_SIGPENDING (seit Linux 2.6.8)

Gibt die Begrenzung der Anzahl von Signalen an, die für die tatsächliche Benutzer-ID des aufrufenden Prozesses in die Warteschlange gestellt werden dürfen. Zur Überprüfung dieser Grenze werden sowohl Standard- als auch Echtzeitsignale gezählt. Das Limit wird jedoch nur für Sigqueue (3) durchgesetzt; Es ist immer möglich, kill (2) zu verwenden, um eine Instanz eines der Signale in die Warteschlange zu stellen, die noch nicht in der Warteschlange des Prozesses stehen.

Im Allgemeinen erhalten Sie die detailliertesten Informationen, wenn Sie sich die Manpages von Syscalls ansehen. C ist die Muttersprache von UNIX / Linux.

b166er
quelle