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

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

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 временной срез, в который доставляется первый сигнал.

  • Невозможно переписать команду «trap» для SIGTSTP, SIGTTIN и SIGTTOU
  • Разработка приложений для Linux и обработка сигналов
  • Как прерывание клавиатуры заканчивается как сигнал процесса
  • Что такое сигнал 0 в команде trap?
  • Может ли Ctrl + C отправить сигнал SIGINT нескольким процессам?
  • FreeBSD: все вышло из сигнала 12 после того, как «make buildworld»
  • Почему различное поведение захвата EXIT vs INT
  • Как генерировать прерывание сигнала в файловом дескрипторе в Linux?
  • В чем разница между выходом из процесса с помощью Ctrl + C и выдачей команды kill -9?
  • Как сигналы работают внутри страны?
  • Безопасное выход из цикла в bash
  • Можно ли отслеживать, откуда пришел SIGINT, если это не от пользователя?
  • Interesting Posts

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

    Команда чтения: как проверить, что пользователь набрал что-то

    Обновление cowbuilder предупреждает об "Не перезапускать sysvinit"

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

    Что означает восклицательный знак при разностном выходе?

    Центральный логический узел Rsyslog

    Как запустить службы, использующие сеанс D-Bus?

    Извлечение системных команд без чтения источников

    Как я могу генерировать случайное 64-битное целое число со знаком с macOS?

    Linux mint 17 не запускается после спящего режима

    Иерархия файлов Linux – лучшее место для хранения файлов lockfiles?

    Запуск установщика .bin в графическом режиме

    Когда мне нужны инструменты разработки / источник ядра для `open-vm-tools`?

    Где / когда – статусы выхода, возвращаемые для фоновых заданий в bash?

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

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