<!DOCTYPE html>
<html class="client-nojs" lang="ru" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>Signal.h</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" type="image/png" href="./_res_/favicon.png">
    <link rel="canonical" href="https://ru.wikipedia.org/wiki/Signal.h"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/skins.vector.styles.legacy.css" rel="stylesheet" type="text/css">
    <meta name="ResourceLoaderDynamicStyles" content="">
    <link href="./_mw_/ext.gadget.common-site.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.gadget.logo.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
    <link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
    <link rel="stylesheet" type="text/css" href="./_res_/footer.css">
    <link rel="stylesheet" type="text/css" href="./_res_/vector.css">
  </head>

  <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Signal_h rootpage-Signal_h skin-vector action-view">
    <div id="content" class="mw-body" role="main">
      <a id="top"></a>
      <h1 id="firstHeading" class="firstHeading mw-first-heading">signal.h</h1>
      <div id="bodyContent" class="vector-body">
        <div id="contentSub">
          <div id="mw-content-subtitle"></div>
        </div>
        <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="ru" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="ru" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r138740689">
/* start https://ru.wikipedia.org/ */


.mw-parser-output .ts-Боковая_навигационная_таблица-body{float:right;clear:right;width:23em;margin:0 0 1.0em 1.0em;background:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);color:inherit;padding:0.4em;border-spacing:0.2em;text-align:center;line-height:1.4em;font-size:90%}.mw-parser-output .ts-Боковая_навигационная_таблица-outerTitle{padding-bottom:0.2em;font-size:125%;line-height:1.15em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage{padding:0 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-caption,.mw-parser-output .ts-Боковая_навигационная_таблица-image-caption{padding-top:0.2em;line-height:1.2em}.mw-parser-output .ts-Боковая_навигационная_таблица-preTitle{padding-top:0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-row+tr>.ts-Боковая_навигационная_таблица-preTitle{padding-top:0}.mw-parser-output .ts-Боковая_навигационная_таблица-image{padding:0.4em 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-title{padding:0.2em 0.4em 0.2em;font-size:125%;line-height:1.15em;font-weight:bold;background:var(--ruwiki-background-color-blue200,#cfe3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-above{padding:0.2em 0.4em 0.2em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-below{padding:0.2em 0.4em 0.2em;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-heading{padding:0.2em 0;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-list{padding:0.2em 0}


/* end   https://ru.wikipedia.org/ */
</style>
<p><b>signal.h</b>&nbsp;— <a href="%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB" title="Заголовочный файл">заголовочный файл</a>, определенный в <a href="%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%A1%D0%B8" title="Стандартная библиотека языка Си">стандартной библиотеке языка Си</a>, для указания того, как программа обрабатывает <a href="%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB%D1%8B_(UNIX)" class="mw-redirect" title="Сигналы (UNIX)">сигналы</a> во время её выполнения. Сигнал может быть как синхронным с помощью вызова <code>raise()</code>, так и асинхронным.
</p><p>Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию.
</p><p>Эта часть библиотеки используется для перехвата сигналов&nbsp;— назначения обработчика определённого сигнала.
</p><p>Обработчик сигнала может вызывать только следующие функции: <code>_exit()</code>, <code>_Exit()</code>, <code>abort()</code>, <code>raise()</code> (только если обработчик не вызван функциями abort или raise). Вызов прочих библиотечных функций приводит к неопределённому поведению, хотя отдельными реализациями такие вызовы могут быть разрешены, например в posix есть список  <b>async-signal-safe</b> функций.
</p>

<div class="mw-heading mw-heading2"><h2 id="Типы_данных"><span id=".D0.A2.D0.B8.D0.BF.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85"></span>Типы данных</h2></div>
<p>Стандарт объявляет тип данных <code>sig_atomic_t</code>, доступ к которому является <a href="%D0%90%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8" class="mw-redirect" title="Атомарные операции">атомарным</a>, даже при наличии <a href="%D0%9F%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Прерывание">асинхронных прерываний</a>.<sup id="cite_ref-std_1-0" class="reference"><a href="#cite_note-std-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Макросы"><span id=".D0.9C.D0.B0.D0.BA.D1.80.D0.BE.D1.81.D1.8B"></span>Макросы</h2></div>
<p>Стандарт объявляет макросы <code>SIG_DFL</code>, <code>SIG_ERR</code>, <code>SIG_IGN</code>, которые используются как аргументы и возвращаемое значение для функции <code>signal()</code>.<sup id="cite_ref-std_1-1" class="reference"><a href="#cite_note-std-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Макрос SIG_DFL используется для установки поведения по умолчанию для выбранного сигнала, SIG_IGN&nbsp;— для игнорирования сигнала, а SIG_ERR&nbsp;— как возвращаемое значение, свидетельствующее об ошибке.
</p><p>Кроме того, стандарт определяет следующие типы сигналов:<sup id="cite_ref-std_1-2" class="reference"><a href="#cite_note-std-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">

<tbody><tr>
<th>Константа</th>
<th>Значение
</th></tr>
<tr>
<td><a href="SIGINT" title="SIGINT">SIGINT</a></td>
<td>Получение интерактивного сигнала
</td></tr>
<tr>
<td><a href="SIGILL" title="SIGILL">SIGILL</a></td>
<td>Недопустимая инструкция
</td></tr>
<tr>
<td><a href="SIGABRT" title="SIGABRT">SIGABRT</a></td>
<td>Ненормальное завершение программы, которое может быть вызвано <code>abort()</code>
</td></tr>
<tr>
<td><a href="SIGFPE" title="SIGFPE">SIGFPE</a></td>
<td>Ошибочная арифметическая операция, такая как <a href="%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BD%D0%BE%D0%BB%D1%8C" title="Деление на ноль">деление на ноль</a> или <a href="%D0%9F%D0%B5%D1%80%D0%B5%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5" class="mw-disambig" title="Переполнение">переполнение</a>
</td></tr>
<tr>
<td><a href="SIGSEGV" title="SIGSEGV">SIGSEGV</a></td>
<td>Ошибочное обращение к объекту в памяти
</td></tr>
<tr>
<td><a href="SIGTERM" title="SIGTERM">SIGTERM</a></td>
<td>Запрос на прекращение выполнения
</td></tr></tbody></table>
<p>и разрешает другие, зависящие от платформы. При запуске программы часть сигналов может игнорироваться, для другой части определяется поведение по умолчанию.
</p>
<div class="mw-heading mw-heading2"><h2 id="Функции"><span id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8"></span>Функции</h2></div>
<p>Стандарт объявляет следующие функции:
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;signal.h&gt;</span>
<span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">signal</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">sig</span><span class="p">,</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">func</span><span class="p">)(</span><span class="kt">int</span><span class="p">)))(</span><span class="kt">int</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">raise</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">sig</span><span class="p">);</span>
</pre></div>
<p>Функция <code>signal</code> устанавливает обработчик <code>func</code> для сигнала <code>sig</code>. В качестве аргумента <code>func</code> может принимать <code>SIG_IGN</code> и <code>SIG_DFL</code>. В случае успеха функция возвращает старый обработчик сигнала, в противном случае&nbsp;— <code>SIG_ERR</code>.
</p><p>Если обработчик возвращает управление при типе сигнала <code>SIGILL</code>, <code>SIGFPE</code>, <code>SIGSEGV</code> или иных, связанных с ошибками выполнения, поведение программы не определено. Кроме того, обработчик если был вызван не с помощью abort или raise, может изменять переменные только типа <code>volatile sig_atomic_t</code>.
</p><p>Функция <code>raise</code> генерирует сигнал <code>sig</code>.<sup id="cite_ref-std_1-3" class="reference"><a href="#cite_note-std-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Методы"><span id=".D0.9C.D0.B5.D1.82.D0.BE.D0.B4.D1.8B"></span>Методы</h2></div>
<ul><li><code>int raise(int sig)</code>. Искусственно вызывает сигнал.</li>
<li><code>psignal(int sig, const char *s)</code>, выводит в <a href="Stderr" class="mw-redirect" title="Stderr">stderr</a> строку, содержащую номер сигнала. Применяется в <a href="BSD" title="BSD">4.3BSD</a>, <a href="Solaris" title="Solaris">Solaris</a> и <a href="Linux" title="Linux">Linux</a>, но не указан в <a href="POSIX" title="POSIX">POSIX</a>, стандартной библиотеке Си и <a href="Single_Unix_Specification" class="mw-redirect" title="Single Unix Specification">SUS</a>. На тех же системах <a href="String.h" title="String.h">string.h</a> содержит нестандартный <code>strsignal(int sig)</code>, который работает аналогично <a href="Strerror" title="Strerror">strerror</a>.</li>
<li><code>void* signal(int sig, void (*func)(int))</code> назначает действие, предпринимаемое при получении программой сигнала <code>sig</code>. Если значение func равно SIG_DFL, то происходит обработка по умолчанию для указанного сигнала. Если значение func равно SIG_IGN, то сигнал игнорируется. В остальных случаях func указывает на вызываемую функцию <i>обработчик сигнала</i> при получении сигнала. Функция func может завершиться выполнением операции возврата или вызовом функций самозавершения, выхода или перехода.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Члены-константы"><span id=".D0.A7.D0.BB.D0.B5.D0.BD.D1.8B-.D0.BA.D0.BE.D0.BD.D1.81.D1.82.D0.B0.D0.BD.D1.82.D1.8B"></span>Члены-константы</h2></div>
<table>

<tbody><tr>
<th>Константа</th>
<th>Значение</th>
<th>Стандарты
</th></tr>
<tr>
<td><a href="SIGHUP" title="SIGHUP">SIGHUP</a></td>
<td>Отбой</td>
<td>POSIX</td>
<td>
</td></tr>
<tr>
<td><a href="SIGINT" title="SIGINT">SIGINT</a></td>
<td>Прерывание</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGQUIT" title="SIGQUIT">SIGQUIT</a></td>
<td>Выход</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGILL" title="SIGILL">SIGILL</a></td>
<td>Недопустимая инструкция</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGABRT" title="SIGABRT">SIGABRT</a></td>
<td>Самоостановка</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGTRAP" title="SIGTRAP">SIGTRAP</a></td>
<td>Перехват события</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGABRT" title="SIGABRT">SIGIOT</a></td>
<td>Перехват ввода-вывода</td>
<td>4.2 BSD
</td></tr>
<tr>
<td><a href="SIGEMT" title="SIGEMT">SIGEMT</a></td>
<td>Перехват эмуляции</td>
<td>4.2 BSD
</td></tr>
<tr>
<td><a href="SIGFPE" title="SIGFPE">SIGFPE</a></td>
<td>Исключение с плавающей запятой</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGKILL" title="SIGKILL">SIGKILL</a></td>
<td>Неперехватываемый сигнал завершения</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGBUS" title="SIGBUS">SIGBUS</a></td>
<td>Ошибка шины</td>
<td>4.2 BSD
</td></tr>
<tr>
<td><a href="SIGSEGV" title="SIGSEGV">SIGSEGV</a></td>
<td>Нарушение сегментации</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGSYS" title="SIGSYS">SIGSYS</a></td>
<td>Неправильный аргумент в системный вызов</td>
<td>4.2 BSD
</td></tr>
<tr>
<td><a href="SIGPIPE" title="SIGPIPE">SIGPIPE</a></td>
<td>Нарушение канала</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGALRM" title="SIGALRM">SIGALRM</a></td>
<td>Истечение времени</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGTERM" title="SIGTERM">SIGTERM</a></td>
<td>Завершение</td>
<td>ANSI
</td></tr>
<tr>
<td><a href="SIGUSR1" class="mw-redirect" title="SIGUSR1">SIGUSR1</a></td>
<td>Пользовательский сигнал 1</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGUSR2" class="mw-redirect" title="SIGUSR2">SIGUSR2</a></td>
<td>Пользовательский сигнал 2</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGCHLD" title="SIGCHLD">SIGCHLD</a></td>
<td>Изменение статуса дочернего процесса</td>
<td>POSIX
</td></tr>
<tr>
<td><a href="SIGCHLD" title="SIGCHLD">SIGCLD</a></td>
<td>Аналогично SIGCHLD</td>
<td>System V
</td></tr>
<tr>
<td><a href="SIGPWR" title="SIGPWR">SIGPWR</a></td>
<td>Перезапуск после проблемы с питанием</td>
<td>System V
</td></tr>
<tr>
<td><a href="SIGXCPU" title="SIGXCPU">SIGXCPU</a></td>
<td>Ограничение процессорного времени</td>
<td>POSIX
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Примечания"><span id=".D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"></span>Примечания</h2></div>
<div class="reflist columns" style="list-style-type: decimal;">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-std-1"><span class="mw-cite-backlink">↑ <a href="#cite_ref-std_1-0"><sup><i><b>1</b></i></sup></a> <a href="#cite_ref-std_1-1"><sup><i><b>2</b></i></sup></a> <a href="#cite_ref-std_1-2"><sup><i><b>3</b></i></sup></a> <a href="#cite_ref-std_1-3"><sup><i><b>4</b></i></sup></a></span> <span class="reference-text"><span class="citation"><span lang="und"><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf">ISO/IEC 9899:TC3 7.14</a></span><span class="hidden-ref" style="display:none;">&nbsp;</span>. Дата обращения: 29 декабря 2011. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180111210637/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf">Архивировано</a> 11 января 2018 года.</span></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Ссылки"><span id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"></span>Ссылки</h2></div>
<ul><li><code><a rel="nofollow" class="external text" href="http://www.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html">signal.h</a></code>&nbsp;—&nbsp;основные определения, <a href="Single_Unix_Specification" class="mw-redirect" title="Single Unix Specification">The Single UNIX® Specification</a>, выпуск 7 от <a href="The_Open_Group" title="The Open Group">The Open Group</a> &nbsp;<span class="ref-info" title="на английском языке" style="cursor:help;">(англ.)</span></li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20081231030403/http://www.dinkumware.com/manuals/?manual=compleat&amp;page=signal.html">Руководство от dinkumware по signal.h</a></li>
<li><a rel="nofollow" class="external text" href="https://archive.today/20121217223745/http://www.xgc.com/manuals/xgclib/c1632.html">Руководство от XGC по signal.h</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
    Эта статья взята у (из) <a class="external text" title="Последний раз редактировалась 2025-07-16" href="https://ru.wikipedia.org/wiki/?title=Signal.h&amp;oldid=146280758">Википедия</a>. Текст лицензируется по <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ru">Creative Commons Attribution-Share Alike 4.0</a>. К медиа файлам могут применятся дополнительные условия.
</div>
</div><!--/htdig_noindex--></div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>