Как узнать, какой процесс потребляет ожидающие сигналы?

При попытке запустить определенную программу пользователь получает следующее сообщение.

timer_create: ресурс временно недоступен

Из этого вопроса и ответа StackOverflow под названием: timer_create (): -1 EAGAIN (ресурс временно недоступен) , я обнаружил, что это связано с нехваткой места для ожидающих сигналов. Я подтвердил это с помощью отдельной учетной записи пользователя, выполнив следующую команду:

$ ulimit -i 0 

и проверить, что я получаю ту же ошибку, что и я. С помощью этой команды:

 $ ulimit -i 1 

или любой более высокой суммы нет ошибки.

Когда исходный пользователь запускает ulimit -i он получает 127368. Таким образом, я пришел к выводу, что они как-то вышли из пространства для ожидающих сигналов.

Что происходит? Означает ли это, что одна или несколько запущенных программ потребляют их? Если да, то как узнать, какие из них?

One Solution collect form web for “Как узнать, какой процесс потребляет ожидающие сигналы?”

Ну, это не очень хорошее решение, но, по крайней мере, это может быть решение.

В /proc/[pid]/status есть запись для SigPnd и ShdPnd. Они описываются как,

SigPnd, ShdPnd: количество ожидающих обработки потоков и процесса в целом (см. Pthreads (7) и сигнал (7)).

Существует также SigQ, который,

SigQ: это поле содержит два разделенных косой чертой числа, которые связаны с сигналами в очереди для реального идентификатора пользователя этого процесса. Первым из них является количество в настоящее время поставленных в очередь сигналов для этого реального идентификатора пользователя, а второе – ограничение ресурсов на количество сигналов в очереди для этого процесса (см. Описание RLIMIT_SIGPENDING в getrlimit (2)).

(Все это от man 5 proc ).

Таким образом, вы можете искать все pid in /proc , проверять их status файлы и находить один с любыми ожидающими сигналами.

Попробуй это,

cd /proc

find . -name "status" | xargs grep SigPnd 2> /dev/null | grep -v "0000000000000000"

а также

find . -name "status" | xargs grep ShdPnd 2> /dev/null | grep -v "0000000000000000"

  • Сжимает ли ctrl-c несколько раз быстрее запускает запущенную программу?
  • Завершение бесконечного цикла
  • Есть ли вариант часов, который обновляется только после получения сигнала?
  • Выходной сигнал в ловушке, вызвавший вызванную ловушку?
  • Вызывается ли SIGHUP при нарушении соединения telnet / SSH?
  • Закрывающий терминал закрывает приложение, вызванное nohup
  • Могу ли я приостановить процесс («стресс»), чтобы имитировать давление памяти за вычетом стоимости процессора?
  • Элементы управления TTY, отправленные в stdin sh, не работают
  • Есть ли инструмент командной строки для управления сигналами unix?
  • Как заставить «xargs» игнорировать выход ребенка и продолжить обработку
  • Есть ли способ сказать, был ли сценарий оболочки убит сигналом 9
  • Interesting Posts

    Как определить, подключен ли аудиокабель?

    Как проверить, используется ли доступ к хранилищу virtio?

    Как использовать lsof для идентификации входящих TCP-соединений?

    Как VARIABLE = () {определение функции} работает в bash

    Отключить зависимости от сбоя обновления zypper

    Как добавить тему gtk2 в KDE?

    gnome-keyring-daemon: недостаточные возможности процесса, необеспеченная память может быть использована

    Безопасно ли выдавать мой открытый ключ SSH для работы?

    Проблема dnssec-валидации centos

    Файлы, отсутствующие после использования mv и подстановки параметров в цикле

    / etc / fstab / rw игнорируется для раздела карты mircosd в ArchLinux

    Остановка бесконечного цикла перезагрузки из /etc/rc.local

    Установка опции udisk2 NTFS по умолчанию для съемного диска

    bash: нет контроля работы в этой оболочке

    Как вы можете группировать символические ссылки с каталогами в выводе `ls`, но сказать разницу?

    Linux и Unix - лучшая ОС в мире.