- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX环境高级编程-第五讲信号
Linux环境高级编程 第五讲 信号 第五讲 信号 信号的概念 signal函数 不可靠信号与可靠信号 信号的发送接收机制 信号集与可靠信号机制 sigsetjmp和siglongjmp函数 abort函数 第五讲 信号 信号的概念 signal函数 不可靠信号与可靠信号 信号的发送接收机制 信号集与可靠信号机制 sigsetjmp和siglongjmp函数 abort函数 信号的概念 基本概念 信号的产生 信号的处理方式 常见信号 信号与文字说明的转换 信号的概念 当某个程序长时间运行,如何中断它的执行,让其退出? 示例5.8 Ctrl+c中断程序执行 是如何中断程序执行的呢? 信号的概念 信号是软件中断。 例如,Ctrl + C,将产生SIGINT信号,中断程序执行 它可以作为进程间通信的一种方式,但更主要的是,信号总是中断一个进程的正常运行,它更多地被用于处理一些非正常情况 每个信号都有一个名字,以SIG开头。 SIGABRT:进程异常终止信号,abort产生 SIGALRM:闹钟信号,计时器超时后产生 Linux 2.4.22共有31种不同的信号 查看头文件/usr/include/bits/signum.h 信号的产生 很多条件可以产生一个信号 当用户按某些终端键时,产生信号。例如在终端上按Ctrl+C键通常产生中断信号(SIGINT)。 硬件异常产生信号:除数为0、无效的存储访问等等。这些条件通常由硬件检测到,并将其通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。 进程用Kill函数可将信号发生给另一个进程或进程组; 用户用Kill命令将信号(终止信号SIGTERM)发送给其他进程 当检测到某种软件条件已经发生,并将其通知有关进程时产生信号。如SIGPIPE、SIGALRM 等等 信号的概念 基本概念 信号的产生 信号的处理方式 常见信号 信号与文字说明的转换 进程对信号的处理方式 进程对信号的处理方式可以有三种: 忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号却不能被忽略。它们是:SIGKILL和SIGSTOP。这两种信号不能被忽略的原因时:它们向超级用户提供了一种使进程终止或停止的可靠方法; 捕捉信号。为了做到这一点要通知内核在某种信号发生时,调用一个用户函数。在用户函数中,可执行用户希望对这种事件进行的处理。 执行系统默认动作。对大多数信号的系统默认动作是终止该进程。 常见的信号 SIGABRT 处理异常信号。当前进程调用abort后发送该信号; SIGALRM 报时时钟。当进程设置的时钟超时后,内核向进程发送一个时钟信号; SIGCHLD 子进程被终止或停止。每当子进程被终止或停止时,内核都会给父进程发送一个信号SIGCHLD,该信号表示的是一个子进程的消亡。 SIGHUP 挂起信号。当终端连接断开时,内核向所有依附在此控制终端上的进程发送此信号; SIGINT 中断信号。当用户按下中断键时,从内核向所有与终端会话有联系的进程发出信号。 常见的信号(续) SIGPIPE 写无接收方的管道或套接字信号。管道和套接字都是一种进程间通讯机制; SIGQUIT 退出信号。与SIGINT信号非常类似,当用户在终端上敲下退出键时,内核会发出这个信号。与SIGINT不同点在于,该信号会导致进程的异常终止。 SIGTTIN/SIGTTOU 后台进程读/写信号。每当一个后台进程试图从控制终端读入/写数据时就会产生此信号,此信号的默认动作是终止进程的运行。 SIGURG 高带宽数据通知信号。该信号通知进程,网络连接中出现了紧急情况或者带外数据; SIGUSR1和SIGUSR2 用户自定义信号。 信号的概念 基本概念 信号的产生 信号的处理方式 常见信号 信号与文字说明的转换 信号值与文字说明的转换 Linux提供了一个数组 extern char* sys_siglist[]; 数组的下标是信号的编号,给出的字符串指针指向相应信号的说明文字 示例5.9 注意,有效的信号编号是从1到31 psignal函数 该函数类似于perror,根据信号值,输出相关的信息 函数原型 #includesignal.h void psignal(int signo, const char* msg); 该函数将字符串msg输出,后面接一个冒号和一个空格,再接着对该信号的说明,最后一个换行符 示例(5.10) strsignal函数 该函数类似于strerror函数,将信号值翻译成可读的字符串 函数原型 #includestring.h char* strsignal(int signo); 参数:signo,即信号编号 返回值:signo对应的说明文字 在Solaris 9中,若信号编号无效,则
文档评论(0)