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

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

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

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

$ ulimit -i 0 

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

 $ ulimit -i 1 

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

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

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

  • Есть ли надежный способ для дочернего процесса передать готовность родительскому процессу?
  • Что происходит при отправке SIGKILL в Zombie Process в Linux?
  • Декодировать флаги для команды Kill
  • Порядок сигналов: SIGPOLL и SIGCHLD
  • Какой сигнал отправляется, когда вы закрываете терминал bash для запущенных программ
  • подтвержденный выход с ловушкой
  • sigint не распространяется на фоновый дочерний процесс
  • Разница между менее сильным сигналом уничтожения -HUP (1) -INT (2) и -TERM (15)
  • 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"

    Interesting Posts

    Игнорировать определенный ip для fail2ban

    Правильные разрешения на загрузку и загрузку SFTP-подкаталогов в домашнем каталоге пользователя?

    Не удалось удалить файл в Fedora

    Добавить пользователя в Solaris

    Solaris 10: удалять завершающие пустые строки из нескольких файлов

    Преобразование данных вертикального массива в данные горизонтальных массивов

    Arch Linux с использованием неправильной MTA

    Что такое «<Esc> Kv» в bash

    Используя sshpass, код возврата (статус выхода) отличается по неизвестным причинам с использованием допустимых команд

    Переименуйте все файлы с определенным расширением во весь подкаталог

    Получить текущее выполнение команды в ssh?

    Можно ли предоставлять разные цвета Xresources для разных терминальных приложений?

    Почему моя туннельная связь IPv6 падает через короткий промежуток времени?

    Застрял установку TexLive с нуля на Debian KDE!

    Сплит недоступен?

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