mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

SIGNAL(2)                                             SIGNAL(2)

НАЗВАНИЕ 
        signal - спецификация действий по обработке сигнала

СИНТАКСИС 
        #include 
        
        void (*signal (sig, func)) ( )
        int sig;
        void (*func) ( );

ОПИСАНИЕ 
        Системный вызов signal позволяет  вызывающему  процессу
        выбрать один из трех возможных способов реакции на  по-
        лучение определенного сигнала.  Аргументы  sig  и  func
        специфицируют, соответственно, сигнал и выбор.

        Аргумент sig может иметь одно из следующих значений, за
        исключением SIGKILL:

        SIGHUP  01     Освобождение линии (hangup).

        SIGINT  02     Прерывание (interrupt).

        SIGQUIT 03 [1] Выход (quit).

        SIGILL  04 [1] Некорректная команда (illegal instructi-
                       on). Не переустанавливается при перехва-
                       те.

        SIGTRAP 05 [1] Трассировочное прерывание (trace  trap).
                       Не переустанавливается при перехвате.

        SIGIOT  06 [1] Машинная команда IOT.

        SIGABRT 06 [1] Рекомендуемый синоним предыдущего.

        SIGEMT  07 [1] Машинная команда EMT.

        SIGFPE  08 [1] Исключительная ситуация  при  выполнении
                       операции    с    вещественными   числами
                       (floating-point exception).

        SIGKILL 09     Уничтожение процесса (kill). Не перехва-
                       тывается и не игнорируется.

        SIGBUS  10 [1] Ошибка шины (bus error).

        SIGSEGV 11 [1] Некорректное обращение к сегменту памяти
                       (segmentation violation).

        SIGSYS  12 [1] Некорректный параметр системного  вызова
                       (bad argument to system call).

        SIGPIPE 13     Запись в канал, из которого  некому  чи-
                       тать (write on a pipe  with  no  one  to
                       read it).

        SIGALRM 14     Будильник (alarm clock).

        SIGTERM 15     Программный сигнал завершения  (software
                       termination signal).

        SIGUSR1 16     Определяемый  пользователем   сигнал   1
                       (user-defined signal 1).

        SIGUSR2 17     Определяемый  пользователем   сигнал   2
                       (user-defined signal 2).

        SIGCLD  18 [2] Завершение порожденного процесса  (death
                       of a child).

        SIGPWR  19 [2] Ошибка питания (power fail).

        SIGPOLL 22 [3] Регистрация     выборочного      события
                       (selectable event pending).

        Аргумент  func  может  иметь  одно  из  трех  значений:
        SIG_DFL, SIG_IGN или адрес_функции. Макросы  SIG_DFL  и
        SIG_IGN определены во включаемом файле . Каж-
        дый из макросов  порождает  уникальную  константу  типа
        "указатель на функцию типа  void",  заведомо  не  соот-
        ветствующую определяемой функции.

        Действия, предписываемые  аргументом  func,  состоят  в
        следующем:

        SIG_DFL - стандартная реакция на сигнал 
             При получении сигнала sig терминировать процесс со
             всеми   завершающими   действиями,   описанными  в
             exit(2); см. замечание [1] ниже.

        SIG_IGN - игнорирование сигнала 
             Игнорировать сигнал sig. Сигнал SIGKILL  не  может
             игнорироваться.

        адрес_функции - перехват сигнала 
             При получении сигнала sig выполнить функцию  обра-
             ботки сигнала func; в качестве единственного аргу-
             мента  функции  func передается номер сигнала sig;
             дополнительные аргументы передаются для  сигналов,
             вырабатываемых   аппаратурой.   Перед  выполнением
             функции func устанавливается  стандартная  реакция
             на  полученный  сигнал, если только этот сигнал не
             есть SIGILL или SIGTRAP. Таким образом, чтобы  пе-
             рехватить  следующий сигнал sig, нужно вновь обра-
             титься к signal, задав в качестве  аргумента  func
             адрес_функции.

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

             Если сигнал, который должен быть перехвачен,  пос-
             тупил  во  время  выполнения   системных   вызовов
             read(2), write(2), open(2) или ioctl(2)  для  мед-
             ленных устройств (таких, как терминал, но не  дис-
             ковый  файл),  pause(2)  или   системного   вызова
             wait(2), который не возвращает немедленно управле-
             ние из-за того, что порожденный процесс остановлен
             или терминирован, то функция обработки сигнала вы-
             полняется, а  затем  прерванный  системный  вызов,
             скорее всего, возвращает вызывающему процессу зна-
             чение -1 и присваивает переменной  errno  значение
             EINTR.

             Системный вызов signal не  проверяет  корректность
             аргумента func. Последствия выполнения функции об-
             работки сигнала,  заданной  некорректным  адресом,
             непредсказуемы.

             Сигнал SIGKILL перехватить нельзя.

        Выполнение системного вызова signal  отменяет  получен-
        ный, но еще не обработанный  сигнал  sig,  если  только
        этот сигнал не есть SIGKILL.

        Системный вызов signal завершается неудачей, если:

        [EINVAL]    Значение аргумента sig является  недопусти-
                    мым номером сигнала, включая SIGKILL.

ПРИМЕЧАНИЯ 
        [1]  Если для  сигналов,  помеченных  [1],  назначается
             стандартная реакция (SIG_DFL), то в  дополнение  к
             тому, что процесс терминируется, в текущем рабочем
             каталоге создается файл с образом памяти, если вы-
             полняются следующие условия:

             1. Действующий и реальный идентификаторы пользова-
                теля процесса, получившего сигнал, совпадают.

             2. Обычный файл с именем core существует и в  него
                можно писать, или файл core может быть  создан;
                создаваемый файл core будет обладать следующими
                характеристиками:

                2.1. Режим доступа 0666, модифицированный  мас-
                     кой режима создания файлов [см. umask(2)].

                2.2. Идентификатор владельца файла равен дейст-
                     вующему идентификатору  пользователя  про-
                     цесса, получившего сигнал.

                2.3. Идентификатор группы файла равен действую-
                     щему идентификатору группы процесса, полу-
                     чившего сигнал.

        [2]  Для сигналов SIGCLD и SIGPWR, как и для других,  в
             качестве func может использоваться  одно  из  трех
             значений: SIG_DFL, SIG_IGN или адрес функции обра-
             ботки  сигнала.  Однако  действия,  предписываемые
             этими значениями, отличаются от описанных выше:

             SIG_DFL - игнорирование сигнала

             SIG_IGN - игнорирование сигнала 
                Если значение sig равно  SIGCLD,  то  процессы,
                порожденные вызывающим процессом, не перейдут в
                состояние  зомби  при  своем  завершении   [см.
                exit(2)].

             адрес_функции - перехват сигнала 
                Если получен сигнал SIGCLD, то на время  выпол-
                нения функции обработки  сигнала  любой  другой
                сигнал SIGCLD игнорируется.

        Сигнал SIGCLD  взаимодействует  с  системными  вызовами
        wait и exit следующим образом:

        wait Если значение func для сигнала SIGCLD  установлено
             равным SIG_IGN и выполняется системный вызов wait,
             то после получения сигнала SIGCLD wait блокируется
             до завершения всех процессов, порожденных вызываю-
             щим процессом; затем wait возвращает -1,  а  пере-
             менной errno присваивается значение ECHILD.

        exit Если процесс, родительский по отношению к  процес-
             су,  выполняющему  exit,  установил  для   сигнала
             SIGCLD действие SIG_IGN, то завершающийся  процесс
             не переходит в состояние зомби.

        При использовании конвейера следует иметь в  виду,  что
        интерпретатор команд  shell  делает  последний  процесс
        конвейера родительским  для  предшествующих  процессов.
        Процесс, который входит в конвейер (и таким образом мо-
        жет стать родительским процессом), не должен перехваты-
        вать сигнал SIGCLD.

        [3]  Сигнал SIGPOLL посылается, когда  для  дескриптора
             файла,   соответствующего   псевдоустройству  [см.
             intro(2)], установлена регистрация выборочных  со-
             бытий.  Процесс  должен специально запрашивать по-
             сылку этого сигнала посредством системного  вызова
             ioctl  с аргументом I_SETSIG, иначе сигнал SIGPOLL
             никогда не будет получен.

СМ. ТАКЖЕ 
        intro(2),  kill(2),   pause(2),   ptrace(2),   wait(2),
        setjmp(3C), sigset(2).
        kill(1) в Справочнике пользователя.

ДИАГНОСТИКА 
        При успешном завершении системного вызова signal  возв-
        ращается предыдущее значение func для указанного сигна-
        ла  sig.  В  противном  случае  возвращается   значение
        SIG_ERR, а переменной errno присваивается  код  ошибки.
        Значение  SIG_ERR  определено   во   включаемом   файле
        .

СЮРПРИЗЫ 
        При попытке  изменить  стандартную  реакцию  на  сигнал
        SIGKILL возвращается значение SIG_DFL  (а  не  SIG_ERR,
        как должно быть), а переменная errno получает  значение
        EINVAL.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк