`
frenchleaf
  • 浏览: 39766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

linux信号

阅读更多
信号是软件中断,感觉就像javascript里的事件

#include "apue.h"

static void	sig_usr(int);	/* one handler for both signals */

int
main(void)
{
	if (signal(SIGUSR1, sig_usr) == SIG_ERR)
		err_sys("can't catch SIGUSR1");
	if (signal(SIGUSR2, sig_usr) == SIG_ERR)
		err_sys("can't catch SIGUSR2");
	for ( ; ; )
		pause();
}

static void
sig_usr(int signo)		/* argument is signal number */
{
	if (signo == SIGUSR1)
		printf("received SIGUSR1\n");
	else if (signo == SIGUSR2)
		printf("received SIGUSR2\n");
	else
		err_dump("received signal %d\n", signo);
}

$ a.out & 在后台启动进程
[1] 4720 作业控制s h e l l打印作业号和进程I D
$ kill -USR1 4720 向该进程发送 SIGUSR1
received SIGUSR1
$ kill -USR2 4720 向该进程发送 SIGUSR2
received SIGUSR2
$ kill 4720 向该进程发送S I G T E R M
[1] + Terminated a.out &

★可再入函数:
进程捕捉到信号并继续执行时,它首先执行该信号处理程序中的指令。如果从信号处理程
序返回(例如没有调用e x i t或l o n g j m p),则继续执行在捕捉到信号时进程正在执行的正常指令序列(这类似于硬件中断发生时所做的),但在信号处理程序中,不能判断捕捉到信号时进程执行到何处,所以异步信号安全的函数只有这些:
apue10.6,unpv22的mq_notify函数,p71,


★kill和raise函数

★使用alarm函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当
所设置的时间值被超过后,产生S I G A L R M信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。
pause函数使调用进程挂起直至捕捉到一个信号

★处理信号集:
#include <signal.h>
int sigemptyset(sigset_t *set) ;
int sigfillset(sigset_t *set) ;
int sigaddset(sigset_t *set, int signo) ;
int sigdelset(sigset_t *set, int signo) ;
四个函数返回:若成功则为0,若出错则为-1
int sigismember(const sigset_t *set,int *signo) ;
返回:若真则为1,若假则为0

★sigprocmask函数
一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。调用
函数sigrocmask可以检测或更改(或两者)进程的信号屏蔽字。
★sigpending返回对于调用进程被阻塞不能递送和当前未决的信号集。该信号集通过set参数返回。
#include <signal.h>
int sigpending(sigset_t *set);
★sigaction函数的功能是检查或修改(或两者)与指定信号相关联的处理动作。此函数取代了
UNIX早期版本使用的signal函数
★sigsetjmp和siglongjmp函数,在信号处理程序中经常调用longjmp函数以返回到程序的主循环中,而不是从该处理程序返回
★sigsuspend在一个原子操作中实现恢复信号屏蔽字,然后使进程睡眠,这种功
能是由sigsuspend函数所提供的
★abort函数的功能是使程序异常终止
★system:POSIX.2要求system忽略SIGINT和SIGQUIT,阻塞SIGCHLD
★sleep:
此函数使调用进程被挂起直到:
(1) 已经过了s e c o n d s所指定的墙上时钟时间,或者
(2) 该进程捕捉到一个信号并从信号处理程序返回。
  • 大小: 56.7 KB
分享到:
评论

相关推荐

    第9章linux信号与定时器

    ### 第9章Linux信号与定时器 #### 一、进程间通信与信号 在Linux操作系统中,进程间通信(IPC)是实现多个进程之间数据交换和同步的重要手段。进程间通信分为即时通信和非即时通信两种类型。其中,即时通信要求...

    linux信号量实例代码

    linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号量 实例代码linux 信号...

    linux信号量详解

    ### Linux信号量详解 #### 一、信号量概念与历史 1965年,E.W.Dijkstra引入了信号量的概念,这是一种操作系统中用于实现进程间互斥和同步的重要机制。信号量本质上是一个包含了非负整型变量的数据结构,伴随着两个...

    Linux信号列表.pdf

    Linux信号列表 Linux操作系统中,信号(Signal)是一种异步事件,用于通知进程发生了某些事件,例如键盘中断、进程终止、内存访问错误等。Linux支持的信号列表包括传统UNIX支持的不可靠信号(1-31)和后来扩充的...

    linux信号说明文档

    ### Linux信号说明文档 在Linux系统中,信号是进程间通信的一种方式,它用来通知接收进程发生了一些事件。本文档将详细介绍Linux系统中常见的信号及其用途。 #### SIGHUP(挂断信号) 当一个终端挂断时(例如,...

    linux信号量机制学习

    linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号量机制学习linux信号...

    linux信号详细列表

    ### Linux信号详细列表:1~31号信号详解 #### 一、概述 在Linux操作系统中,信号是一种轻量级的进程间通信机制,用于通知接收进程某个事件的发生。信号可以由硬件异常(例如除零错误)触发,也可以由软件(如kill...

    第四章_LINUX信号.ppt

    第四章_LINUX信号.ppt 信号介绍 信号处理

    linux信号的机制

    ### Linux信号机制详解 #### 一、信号的基本概念 在Linux操作系统中,信号(Signal)是一种重要的进程间通信(IPC, Inter-Process Communication)机制,主要用于通知进程发生了某些类型的异常事件或状态变化。...

    Linux信号编程课件与实验代码.rar

    Linux信号编程是操作系统领域的重要组成部分,特别是在开发服务器端软件或者进行系统级编程时,理解并掌握信号机制至关重要。本资源“Linux信号编程课件与实验代码.rar”提供了一个全面学习和实践Linux信号处理的...

    Linux信号机制的分析与研究

    ### Linux信号机制的分析与研究 #### 一、引言 在现代操作系统中,Linux以其稳定性和灵活性成为了服务器领域的首选操作系统之一。其中,信号机制作为Linux内核中的一个重要组成部分,对于实现进程间的通信和异常...

    unix/linux信号详解大全

    Unix/Linux 信号详解大全 Unix/Linux 操作系统中,信号是一种异步事件处理机制,用于通知进程某个事件的发生。信号可以由硬件异常、软件异常、终止进程、进程挂起、定时器到期等事件触发。本文将对 Unix/Linux 信号...

    Linux 信号signal处理机制

    Linux 信号机制是操作系统提供的一种进程间通信方式,它用于通知进程发生了特定的异步事件。信号机制在Linux编程中扮演着重要角色,因为它允许进程响应来自其他进程、内核或者用户的事件。以下是对信号机制的详细...

    Linux信号机制解析.pdf

    【标题】:“Linux信号机制解析.pdf” 【描述】:“Linux信号机制解析.pdf” 【标签】:“Linux 操作系统 系统开发 参考文献 专业指导” 【部分内容】:分析了信号机制的特性,指出了早期信号机制的不足、原因...

    linux信号量说明

    ### Linux信号详解 #### 一、引言 在Linux系统中,信号是一种进程间通信机制,主要用于异步通知进程发生了某种事件。通过本篇文章,我们将详细介绍Linux中的信号及其作用。 #### 二、信号概述 Linux信号是操作...

    Linux信号——IBM教程

    ### Linux信号机制详解 #### 一、信号及信号来源 信号是Linux系统中一种重要的进程间通信机制,它主要用于在程序或系统发生特定事件时通知进程。信号可以在多个层面上帮助开发者实现进程间的异步通信。 **信号的...

    Linux信号在进程控制中的应用

    Linux信号是进程间通信(IPC)的一种机制,它允许一个进程向另一个进程发送异步通知。Linux信号在进程控制中的应用非常广泛,既可以通过信号传递信息,又能在一定程度上控制进程的操作。本文将详细探讨Linux信号在...

    linux信号专题笔记.docx

    ### Linux信号专题笔记 #### Linux信号基本概念 Linux信号是一种软件中断机制,它允许系统对特定事件做出反应。这些事件可以是程序错误、外部请求或者是系统级别的改变。当发生这样的事件时,系统会向进程发送一个...

    一些很好的Linux 信号讲解

    这份名为"一些很好的Linux 信号讲解"的资料详细探讨了Linux信号的各个方面,包括其定义、应用以及使用方法。以下是对这些知识点的深入解析。 一、信号的定义 信号是操作系统发送给进程的通知,用来提醒进程某些异步...

Global site tag (gtag.js) - Google Analytics