39.html

来自「linux 0.11中文版 有注释」· HTML 代码 · 共 116 行

HTML
116
字号
<html>
<head>
<title>include/signal.h</title>
<meta name='robots' content='noindex,nofollow'>
<meta name='generator' content='GLOBAL-5.4.1'>
</head>
<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>
<a name='TOP'><h2><a href='../mains.html'>root</a>/<a href='../files/99.html'>include</a>/signal.h</h2>
<i><font color='green'>/* [&lt;][&gt;][^][v][top]<a href='#BOTTOM'>[bottom]</a><a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
<hr>
<h2><a href='../J/39.html' title='Multiple included from 8 places.'>INCLUDED FROM</a></h2>
<hr>
<pre>
<a name='L1'><font color='darkred'>#ifndef</font> <a href='../S/39.html#L2' title='Defined at 2 in include/signal.h.'>_SIGNAL_H</a>
<a name='L2'><font color='darkred'>#define</font> <a href='../S/39.html#L1' title='Refered from 1 in include/signal.h.'>_SIGNAL_H</a>
<a name='L3'>
<a name='L4'><font color='darkred'>#include</font> &lt;<a href='45.html'>sys/types.h</a>&gt;          <i><font color='green'>// 类型头文件。定义了基本的系统数据类型。</font></i>
<a name='L5'>
<a name='L6'><b>typedef</b> <b>int</b> sig_atomic_t;       <i><font color='green'>// 定义信号原子操作类型。</font></i>
<a name='L7'><b>typedef</b> <b>unsigned</b> <b>int</b> <a href='../R/610.html' title='Multiple refered from 9 places.'>sigset_t</a>;  <i><font color='green'>/* 32 bits */</font></i><i><font color='green'>// 定义信号集类型。</font></i>
<a name='L8'>
<a name='L9'><font color='darkred'>#define</font> <a href='../S/39.html#L10' title='Refered from 10 in include/signal.h.'>_NSIG</a> 32                <i><font color='green'>// 定义信号种类 -- 32 种。</font></i>
<a name='L10'><font color='darkred'>#define</font> NSIG <a href='../S/39.html#L9' title='Defined at 9 in include/signal.h.'>_NSIG</a>              <i><font color='green'>// NSIG = _NSIG</font></i>
<a name='L11'>
<a name='L12'><i><font color='green'>// 以下这些是Linux 0.11 内核中定义的信号。</font></i>
<a name='L13'><font color='darkred'>#define</font> <a href='../S/67.html#L65' title='Refered from 65 in kernel/exit.c.'>SIGHUP</a> 1                <i><font color='green'>// Hang Up -- 挂断控制终端或进程。</font></i>
<a name='L14'><font color='darkred'>#define</font> <a href='../S/65.html#L26' title='Refered from 26 in kernel/chr_drv/tty_io.c.'>SIGINT</a> 2                <i><font color='green'>// Interrupt -- 来自键盘的中断。</font></i>
<a name='L15'><font color='darkred'>#define</font> <a href='../S/65.html#L27' title='Refered from 27 in kernel/chr_drv/tty_io.c.'>SIGQUIT</a> 3               <i><font color='green'>// Quit -- 来自键盘的退出。</font></i>
<a name='L16'><font color='darkred'>#define</font> SIGILL 4                <i><font color='green'>// Illeagle -- 非法指令。</font></i>
<a name='L17'><font color='darkred'>#define</font> SIGTRAP 5               <i><font color='green'>// Trap -- 跟踪断点。</font></i>
<a name='L18'><font color='darkred'>#define</font> SIGABRT 6               <i><font color='green'>// Abort -- 异常结束。</font></i>
<a name='L19'><font color='darkred'>#define</font> SIGIOT 6                <i><font color='green'>// IO Trap -- 同上。</font></i>
<a name='L20'><font color='darkred'>#define</font> SIGUNUSED 7             <i><font color='green'>// Unused -- 没有使用。</font></i>
<a name='L21'><font color='darkred'>#define</font> <a href='../R/219.html' title='Multiple refered from 2 places.'>SIGFPE</a> 8                <i><font color='green'>// FPE -- 协处理器出错。</font></i>
<a name='L22'><font color='darkred'>#define</font> <a href='../R/222.html' title='Multiple refered from 5 places.'>SIGKILL</a> 9               <i><font color='green'>// Kill -- 强迫进程终止。</font></i>
<a name='L23'><font color='darkred'>#define</font> SIGUSR1 10              <i><font color='green'>// User1 -- 用户信号1,进程可使用。</font></i>
<a name='L24'><font color='darkred'>#define</font> <a href='../R/226.html' title='Multiple refered from 2 places.'>SIGSEGV</a> 11              <i><font color='green'>// Segment Violation -- 无效内存引用。</font></i>
<a name='L25'><font color='darkred'>#define</font> SIGUSR2 12              <i><font color='green'>// User2 -- 用户信号2,进程可使用。</font></i>
<a name='L26'><font color='darkred'>#define</font> <a href='../S/16.html#L75' title='Refered from 75 in fs/pipe.c.'>SIGPIPE</a> 13              <i><font color='green'>// Pipe -- 管道写出错,无读者。</font></i>
<a name='L27'><font color='darkred'>#define</font> <a href='../R/217.html' title='Multiple refered from 2 places.'>SIGALRM</a> 14              <i><font color='green'>// Alarm -- 实时定时器报警。</font></i>
<a name='L28'><font color='darkred'>#define</font> SIGTERM 15              <i><font color='green'>// Terminate -- 进程终止。</font></i>
<a name='L29'><font color='darkred'>#define</font> SIGSTKFLT 16            <i><font color='green'>// Stack Fault -- 栈出错(协处理器)。</font></i>
<a name='L30'><font color='darkred'>#define</font> <a href='../R/218.html' title='Multiple refered from 4 places.'>SIGCHLD</a> 17              <i><font color='green'>// Child -- 子进程停止或被终止。</font></i>
<a name='L31'><font color='darkred'>#define</font> SIGCONT 18              <i><font color='green'>// Continue -- 恢复进程继续执行。</font></i>
<a name='L32'><font color='darkred'>#define</font> <a href='../S/74.html#L31' title='Refered from 31 in kernel/sched.c.'>SIGSTOP</a> 19              <i><font color='green'>// Stop -- 停止进程的执行。</font></i>
<a name='L33'><font color='darkred'>#define</font> <a href='../S/65.html#L28' title='Refered from 28 in kernel/chr_drv/tty_io.c.'>SIGTSTP</a> 20              <i><font color='green'>// TTY Stop -- tty 发出停止进程,可忽略。</font></i>
<a name='L34'><font color='darkred'>#define</font> SIGTTIN 21              <i><font color='green'>// TTY In -- 后台进程请求输入。</font></i>
<a name='L35'><font color='darkred'>#define</font> SIGTTOU 22              <i><font color='green'>// TTY Out -- 后台进程请求输出。</font></i>
<a name='L36'>
<a name='L37'><i><font color='green'>/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */</font></i>
<a name='L38'><i><font color='green'>/* OK,我还没有实现sigactions 的编制,但在头文件中仍希望遵守POSIX 标准 */</font></i>
<a name='L39'><font color='darkred'>#define</font> SA_NOCLDSTOP 1          <i><font color='green'>// 当子进程处于停止状态,就不对SIGCHLD 处理。</font></i>
<a name='L40'><font color='darkred'>#define</font> <a href='../R/213.html' title='Multiple refered from 4 places.'>SA_NOMASK</a> 0x40000000    <i><font color='green'>// 不阻止在指定的信号处理程序(信号句柄)中再收到该信号。</font></i>
<a name='L41'><font color='darkred'>#define</font> <a href='../R/214.html' title='Multiple refered from 2 places.'>SA_ONESHOT</a> 0x80000000   <i><font color='green'>// 信号句柄一旦被调用过就恢复到默认处理句柄。</font></i>
<a name='L42'>
<a name='L43'><i><font color='green'>// 以下参数用于sigprocmask()-- 改变阻塞信号集(屏蔽码)。这些参数可以改变该函数的行为。</font></i>
<a name='L44'><font color='darkred'>#define</font> SIG_BLOCK 0             <i><font color='green'>/* for blocking signals */</font></i>
<a name='L45'><i><font color='green'>// 在阻塞信号集中加上给定的信号集。</font></i>
<a name='L46'><font color='darkred'>#define</font> SIG_UNBLOCK 1           <i><font color='green'>/* for unblocking signals */</font></i>
<a name='L47'><i><font color='green'>// 从阻塞信号集中删除指定的信号集。</font></i>
<a name='L48'><font color='darkred'>#define</font> SIG_SETMASK 2           <i><font color='green'>/* for setting the signal mask */</font></i>
<a name='L49'><i><font color='green'>// 设置阻塞信号集(信号屏蔽码)。</font></i>
<a name='L50'>
<a name='L51'><font color='darkred'>#define</font> SIG_DFL ((<b>void</b> (*)(<b>int</b>))0)      <i><font color='green'>/* default signal handling */</font></i>
<a name='L52'><i><font color='green'>// 默认的信号处理程序(信号句柄)。</font></i>
<a name='L53'><font color='darkred'>#define</font> SIG_IGN ((<b>void</b> (*)(<b>int</b>))1)      <i><font color='green'>/* ignore signal */</font></i>
<a name='L54'><i><font color='green'>// 忽略信号的处理程序。</font></i>
<a name='L55'>
<a name='L56'><i><font color='green'>// 下面是sigaction 的数据结构。</font></i>
<a name='L57'><i><font color='green'>// sa_handler 是对应某信号指定要采取的行动。可以是上面的SIG_DFL,或者是SIG_IGN 来忽略</font></i>
<a name='L58'><i><font color='green'>// 该信号,也可以是指向处理该信号函数的一个指针。</font></i>
<a name='L59'><i><font color='green'>// sa_mask 给出了对信号的屏蔽码,在信号程序执行时将阻塞对这些信号的处理。</font></i>
<a name='L60'><i><font color='green'>// sa_flags 指定改变信号处理过程的信号集。它是由37-39 行的位标志定义的。</font></i>
<a name='L61'><i><font color='green'>// sa_restorer 恢复过程指针,是用于保存原返回的过程指针。</font></i>
<a name='L62'><i><font color='green'>// 另外,引起触发信号处理的信号也将被阻塞,除非使用了SA_NOMASK 标志。</font></i>
<a name='L63'><b>struct</b> sigaction
<a name='L64'><font color='red'>{</font>
<a name='L65'>  <b>void</b> (*sa_handler) (<b>int</b>);
<a name='L66'>  <a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> sa_mask;
<a name='L67'>  <b>int</b> sa_flags;
<a name='L68'>  <b>void</b> (*sa_restorer) (<b>void</b>);
<a name='L69'><font color='red'>}</font>;
<a name='L70'>
<a name='L71'><i><font color='green'>// 为信号_sig 安装一个新的信号处理程序(信号句柄),与sigaction()类似。</font></i>
<a name='L72'><b>void</b> (*signal (<b>int</b> _sig, <b>void</b> (*_func) (<b>int</b>))) (<b>int</b>);
<a name='L73'><i><font color='green'>// 向当前进程发送一个信号。其作用等价于kill(getpid(),sig)。</font></i>
<a name='L74'><b>int</b> raise (<b>int</b> sig);
<a name='L75'><i><font color='green'>// 可用于向任何进程组或进程发送任何信号。</font></i>
<a name='L76'><b>int</b> kill (<a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> pid, <b>int</b> sig);
<a name='L77'><i><font color='green'>// 向信号集中添加信号。</font></i>
<a name='L78'><b>int</b> sigaddset (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * mask, <b>int</b> signo);
<a name='L79'><i><font color='green'>// 从信号集中去除指定的信号。</font></i>
<a name='L80'><b>int</b> sigdelset (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * mask, <b>int</b> signo);
<a name='L81'><i><font color='green'>// 从信号集中清除指定信号集。</font></i>
<a name='L82'><b>int</b> sigemptyset (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * mask);
<a name='L83'><i><font color='green'>// 向信号集中置入所有信号。</font></i>
<a name='L84'><b>int</b> sigfillset (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * mask);
<a name='L85'><i><font color='green'>// 判断一个信号是否是信号集中的。1 -- 是, 0 -- 不是, -1 -- 出错。</font></i>
<a name='L86'><b>int</b> sigismember (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * mask, <b>int</b> signo);   <i><font color='green'>/* 1 - is, 0 - not, -1 error */</font></i>
<a name='L87'><i><font color='green'>// 对set 中的信号进行检测,看是否有挂起的信号。</font></i>
<a name='L88'><b>int</b> sigpending (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * set);
<a name='L89'><i><font color='green'>// 改变目前的被阻塞信号集(信号屏蔽码)。</font></i>
<a name='L90'><b>int</b> sigprocmask (<b>int</b> how, <a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * set, <a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * oldset);
<a name='L91'><i><font color='green'>// 用sigmask 临时替换进程的信号屏蔽码,然后暂停该进程直到收到一个信号。</font></i>
<a name='L92'><b>int</b> sigsuspend (<a href='../S/39.html#L7' title='Defined at 7 in include/signal.h.'>sigset_t</a> * sigmask);
<a name='L93'><i><font color='green'>// 用于改变进程在收到指定信号时所采取的行动。</font></i>
<a name='L94'><b>int</b> sigaction (<b>int</b> sig, <b>struct</b> sigaction *act, <b>struct</b> sigaction *oldact);
<a name='L95'>
<a name='L96'><font color='darkred'>#endif</font> <i><font color='green'>/* _SIGNAL_H */</font></i>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;][^][v]<a href='#TOP'>[top]</a>[bottom]<a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?