Какие ожидающие сигналы?

9

Глядя на пределы запущенного процесса, я вижу

Max pending signals       15725
  • Что это?
  • Как я могу определить разумную ценность для занятого обслуживания?

Как правило, я не могу найти страницу, которая объясняет, что такое каждый лимит. Некоторые из них довольно понятны (максимальное количество открытых файлов), другие - меньше (максимальный размер сообщения).

Барт ван Хейкелом
источник
На почти современном Arch Linux, ядро ​​3.14.37-1-lts, zsh, я получаю sigpending 31603. Почему эти ограничения такие странные числа (то есть не степень 2)?
Брюс Эдигер

Ответы:

6

Согласно справочной странице по sigpending:

sigpending () возвращает набор сигналов, ожидающих доставки в вызывающий поток (т. е. сигналы, которые были подняты во время блокировки).

Таким образом, подразумеваются сигналы (sigterm, sigkill, sigstop, ...), которые ожидают, пока процесс не выйдет из состояния D(непрерывного сна). Обычно процесс находится в том состоянии, когда он ожидает ввода / вывода. Этот сон не может быть прерван. Даже sigkill ( kill -9) не может, и ядро ​​ждет, пока процесс не проснется (сигнал ожидает доставки так долго).

Для других неясных значений, я хотел бы взглянуть на страницах руководства по limits.conf.

хаос
источник
Это страниц руководства sigqueueи setrlimitчто вы действительно должны смотреть.
JdeBP
0

Пределы процесса контролируются с помощью setrlimit (2)

Так что вы можете заглянуть в его справочную страницу:

RLIMIT_SIGPENDING (начиная с Linux 2.6.8)

Указывает ограничение на количество сигналов, которые могут быть поставлены в очередь для реального идентификатора пользователя вызывающего процесса. Стандартные сигналы и сигналы в реальном времени учитываются с целью проверки этого предела. Тем не менее, ограничение применяется только для sigqueue (3); всегда можно использовать kill (2), чтобы поставить в очередь один экземпляр любого из сигналов, которые еще не поставлены в очередь в процессе.

Как правило, вы можете получить наиболее подробную информацию, когда заглядываете в man-страницы системных вызовов. C является родным языком UNIX / Linux.

b166er
источник