Что происходит с запрошенными рекурсивными сигналами?

Люди часто нажимают Ctrl + c или Ctrl + z чтобы отменить или отказаться от задания, если процесс становится вялым, в этом случае, какой из этих сигналов обрабатывается, первый или последний ? обрабатывается каждый сигнал? если нет, то какие из них игнорируются ?

  • В Ctrl + C убейте текущую команду, но продолжайте выполнение скрипта
  • тайм-аут
  • При завершении работы перед установкой аварийного сигнала отключите накопители?
  • Дайте группе право отправлять сигналы убийства
  • Ловушка ctrl c не работает как ожидалось
  • Какой сигнал отправляет X своим клиентам, когда он получает SIGINT?
  • FreeBSD: все вышло из сигнала 12 после того, как «make buildworld»
  • Безопасное выход из цикла в bash
  • 2 Solutions collect form web for “Что происходит с запрошенными рекурсивными сигналами?”

    Сигналы отправляются в том порядке, в котором вы вводите их через терминал в ядро. Если вы используете Ctrl + C, вы поручаете ядру отправить сигнал SIGINT в группу процессов переднего плана. После этого команда, которая была запущена, будет завершена.

    С помощью Ctrl + Z вы отправляете сигнал SIGSTP. Который фактически не убивает процесс, просто говорит ему временно остановиться. Когда это используется, вы можете возобновить процесс, сообщая оболочке, чтобы вернуть его на передний план, с помощью команды fg , или вы можете записать его с помощью команды bg .

    Если задание было остановлено с помощью сигнала SIGSTP, вы можете действительно убить его командой kill следующим образом:

     $ kill %1 

    Где %1 – это идентификатор задания, который вы только SIGSTP'd.

    Проверка остановленных работ

    Вы можете использовать команду job чтобы увидеть, какая работа была остановлена ​​в оболочке, например:

     $ sleep 1000 ^Z [1]+ Stopped sleep 1000 $ jobs [1]+ Stopped sleep 1000 

    Здесь я использовал Ctrl + Z, чтобы остановить команду sleep 1000 . На выходе [1] соответствует %1 о котором я упоминал выше. Убить его так же, как и Ctrl + C, будет такой же эффект.

     $ kill %1 [1]+ Terminated sleep 1000 

    Команда fg и bg о которой я упоминал выше, будет действовать на работу с плюсом, + после ее числа. Обратите внимание на это здесь:

     [1]+ Stopped sleep 1000 

    Это более очевидно, если у меня есть несколько заданий, например:

     $ jobs [1] Stopped sleep 1000 [2]- Stopped sleep 2000 [3]+ Stopped sleep 3000 

    Таким образом, любая голова fg или команда bg будет действовать на работу с помощью + . Я могу настроить таргетинг на конкретный:

     $ fg %1 sleep 1000 

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

    Когда процесс получает сигнал, но не готов к его обработке (например, сигнал замаскирован или процесс остановлен), ядро ​​отмечает сигнал как ожидающий. Сигнал будет доставлен.

    Если несколько сигналов разных чисел принимаются, пока процесс не готов, тогда все сигналы будут обрабатываться. Сигналы поступают в процесс один за другим. Порядок, в котором они поставляются, не указывается POSIX ; на Linux , они доставляются по числу, наименьшим первым (так, например, SIGHUP = 1 будет доставлен первым, если ожидается, затем SIGQUIT = 2 и т. д.); FreeBSD не дает никаких гарантий.

    Если несколько сигналов с одинаковым номером принимаются, пока процесс не готов, эти сигналы могут быть объединены. POSIX не указывает, что происходит, но большинство объединений сливаются. Например, если вы запустите kill -1 234; kill -1 234 kill -1 234; kill -1 234 , то обрабатывается ли обработчик процесса 234 для сигнала 1 один или два раза в зависимости от времени, это зависит от того, получает ли 234 временной срез, в который доставляется первый сигнал.

    Interesting Posts

    Экран становится черным, в случайном порядке. * ОШИБКА * atombios застревает в исполнении C88E

    Как установить шаблоны и пакеты одновременно?

    Не удалось успешно форматировать флеш-накопитель 64G USB на centos 6.2 / centos 6.3

    Как получить использование физической памяти в Solaris с помощью командной строки

    Как скопировать с помощью scp файл, который неизвестен с помощью сценария bash

    Проверка того, что $ ((a * b)) оценивается в моей собственной оболочке

    Скрипт для отправки PDF-файлов

    Как открыть главы руководства пользователя Vim в Vim

    Regex: соответствие 2-го и 3-го символов

    синхронизировать конкретный файл рекурсивно, но только в подкаталогах, присутствующих в пункте назначения

    Как получить полезное полное шифрование диска с различными шифрованиями для разных пользователей

    Как отслеживать изменение файла

    Найти исполняемые файлы рекурсивно

    Получение PID фонового процесса, который запускается через источник

    Тестирование MPTCP на LEDE

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