Сигналы отлова в Python - PullRequest
       21

Сигналы отлова в Python

3 голосов
/ 31 октября 2009

Согласно документации :

Нет способа временно «заблокировать» сигналы от критических секций (поскольку это поддерживается не всеми разновидностями Unix).

Что мешает мне использовать signal.signal(signum,SIG_IGN), чтобы заблокировать его, а затем добавить сигнал обратно?

1 Ответ

11 голосов
/ 31 октября 2009

Что вас останавливает, так это то, что если сигнал действительно поступает, когда SIG_IGN установлен, то он будет игнорироваться и выбрасываться. Когда вы добавите сигнал позже, будет слишком поздно, потому что он пропал, и вы никогда не узнаете, что это произошло.

Таким образом, вы будете «игнорировать» (= отбрасывать) сигнал, а не «блокировать» его (= оставляли его для обработки в конце критической секции). Ваша путаница здесь может просто возникнуть из-за того, что вы не знаете, что конкретно означает «блокировка» сигнала: это означает, что ОС зависает на сигнале, позволяя ей подождать, пока не завершится критическая секция.

См. (Как отличный справочник для всех подобных вопросов) Расширенное программирование У. Ричарда Стивена в среде UNIX . Раздел 10.8 в издании «Надежная терминология и семантика сигналов», который я только что проверил, прежде чем отвечать, чтобы быть уверенным в своем ответе.

Обновление: на моем ноутбуке с Ubuntu, "man sigprocmask" (если установлен manpages-dev), похоже, является страницей руководства, с которой нужно начать изучать блокировку сигналов. Опять же, как отмечается в документации по Python, это доступно не для всех Unix, поэтому не ожидайте, что ваш старый Irix или AIX запустит вашу программу Python, если вы действительно используете «sigprocmask». Но, может быть, вы не беспокоитесь об этом. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...