<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Signal.h</id>
	<title>Signal.h - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Signal.h"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Signal.h&amp;action=history"/>
	<updated>2026-07-12T07:02:13Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Signal.h&amp;diff=1978933&amp;oldid=prev</id>
		<title>imported&gt;AromaTake：​/* top */ 調整內部連結。使用:en:Help:Pipe trick</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Signal.h&amp;diff=1978933&amp;oldid=prev"/>
		<updated>2025-01-16T08:16:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;top：​&lt;/span&gt; 調整內部連結。使用&lt;a href=&quot;/index.php?title=En:Help:Pipe_trick&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;En:Help:Pipe trick（页面不存在）&quot;&gt;en:Help:Pipe trick&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
{{C_Standard_library}} &amp;lt;!-- to edit this template go to [[template:C_Standard_library]] --&amp;gt;&lt;br /&gt;
{{lowercase|title=string.h}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;#039;&amp;#039;&amp;#039;signal.h&amp;#039;&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;是[[C标准函数库]]中的[[信号处理]]部分， 定义了程序执行时如何处理不同的[[信号 (计算机科学)|信号]]。信号用作[[进程间通信]]， 报告异常行为（如[[除以零|除零]]）、用户的一些按键组合（如同时按下Ctrl与C键，产生信号[[SIGINT (POSIX)|SIGINT]]）。&lt;br /&gt;
&lt;br /&gt;
[[C++]]中的对应头文件是&amp;lt;code&amp;gt;csignal&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
==标准信号==&lt;br /&gt;
&lt;br /&gt;
C语言标准定义了6个信号。都定义在&amp;lt;code&amp;gt;signal.h&amp;lt;/code&amp;gt;头文件中&amp;lt;ref name=c99&amp;gt;{{cite book  | url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf  | title=ISO/IEC 9899:1999 specification  | at=p. 258, § 7.14 &amp;#039;&amp;#039;Signal handling&amp;#039;&amp;#039;  | access-date=2012-11-06  | archive-date=2011-01-24  | archive-url=https://web.archive.org/web/20110124052108/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf  | dead-url=yes  }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGABRT&amp;lt;/code&amp;gt; - 异常中止。&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGFPE&amp;lt;/code&amp;gt; - 浮点异常。&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGILL&amp;lt;/code&amp;gt; - 无效指令。&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGINT&amp;lt;/code&amp;gt; - 交互的用户按键请求，默认情况下，这会导致进程终止。&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGSEGV&amp;lt;/code&amp;gt; - 无效内存访问。&lt;br /&gt;
*&amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt; - 程序的中止请求。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;signal.h&amp;lt;/code&amp;gt;可能还定义了其它信号，这依赖于具体实现。例如，类Unix系统还定义了15个以上的信号&amp;lt;ref name=&amp;quot;sus&amp;quot;&amp;gt;{{cite web | url=http://pubs.opengroup.org/onlinepubs/007904975/ | title=The Open Group Base Specifications Issue 6 - signal.h - signals | accessdate=10 January 2012 | archive-date=2012-12-12 | archive-url=https://web.archive.org/web/20121212042516/http://pubs.opengroup.org/onlinepubs/007904975/ | dead-url=yes }}&amp;lt;/ref&amp;gt;。[[Visual C++]]的C标准库只支持C语言标准规定的6个信号，即对信号处理只提供最小的支持。&lt;br /&gt;
&lt;br /&gt;
==信号处理==&lt;br /&gt;
&lt;br /&gt;
库函数&amp;lt;code&amp;gt;raise()&amp;lt;/code&amp;gt;或者系统调用&amp;lt;code&amp;gt;kill()&amp;lt;/code&amp;gt;可以产生信号。&amp;lt;code&amp;gt;raise()&amp;lt;/code&amp;gt;发送一个信号给当前进程，&amp;lt;code&amp;gt;kill()&amp;lt;/code&amp;gt;发送一个信号给特定进程。 &lt;br /&gt;
&lt;br /&gt;
除了两个信号[[SIGKILL]]与[[SIGSTOP]]不能被捕获（caught）、阻塞（blocked）或者忽略，其它的信号都可以指定处理函数（handler）。一个信号的处理函数在信号到达时，被目标环境调用。目标环境挂起当前进程的执行，直到信号处理函数返回或者调用了&amp;lt;code&amp;gt;longjmp()&amp;lt;/code&amp;gt;。为了最大的兼容性，异步信号处理只应： &lt;br /&gt;
*成功调用了&amp;lt;code&amp;gt;signal()&amp;lt;/code&amp;gt;指定的函数；&lt;br /&gt;
*给类型为&amp;lt;code&amp;gt;sig_atomic_t&amp;lt;/code&amp;gt;的对象赋值；&lt;br /&gt;
*把控制返回给它的调用者。&lt;br /&gt;
&lt;br /&gt;
如果信号报告了进程的错误，信号处理函数应该调用&amp;lt;code&amp;gt;abort()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;longjmp()&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
==函数==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size:0.85em&amp;quot;&lt;br /&gt;
! 函数&lt;br /&gt;
! 描述&lt;br /&gt;
|-&lt;br /&gt;
| {{anchor|raise}}&amp;lt;code&amp;gt;[http://en.cppreference.com/w/c/program/raise raise]&amp;lt;/code&amp;gt;&lt;br /&gt;
| 人工抛出一个信号&lt;br /&gt;
|-&lt;br /&gt;
| {{anchor|signal}}&amp;lt;code&amp;gt;[http://en.cppreference.com/w/c/program/signal signal]&amp;lt;/code&amp;gt;&lt;br /&gt;
| 当程序收到特定信号时应该执行的处理函数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==例子==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static void catch_function(int signal) {&lt;br /&gt;
    puts(&amp;quot;Interactive attention signal caught.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    if (signal(SIGINT, catch_function) == SIG_ERR) {&lt;br /&gt;
        fputs(&amp;quot;An error occurred while setting a signal handler.\n&amp;quot;, stderr);&lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    puts(&amp;quot;Raising the interactive attention signal.&amp;quot;);&lt;br /&gt;
    if (raise(SIGINT) != 0) {&lt;br /&gt;
        fputs(&amp;quot;Error raising the signal.\n&amp;quot;, stderr);&lt;br /&gt;
        return EXIT_FAILURE;&lt;br /&gt;
    }&lt;br /&gt;
    puts(&amp;quot;Exiting.&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[[信号 (计算机科学)]]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
* [https://web.archive.org/web/20110610211237/http://www.xgc.com/manuals/xgclib/c1632.html XGC&amp;#039;s manual for signal.h]&lt;br /&gt;
&lt;br /&gt;
[[Category:C标准库头文件]]&lt;/div&gt;</summary>
		<author><name>imported&gt;AromaTake</name></author>
	</entry>
</feed>