signal信号

linux之DBUS基础学习记录

99封情书 提交于 2019-12-06 07:20:19
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。 总线   在D-Bus中,“bus”是核心的概念,它是一个通道:不同的程序可以通过这个通道做些操作,比如方法调用、发送信号和监听特定的信号。在一台机器上总线守护有多个实例(instance)。这些总线之间都是相互独立的。 一个持久的系统总线(system bus): 它在引导时就会启动。这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。它是桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程

Linux 的各种 signal

佐手、 提交于 2019-12-03 13:17:01
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。 3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。 5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用。 6) SIGABRT 调用abort函数生成的信号。 7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。 8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。 9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。 10) SIGUSR1 留给用户使用 11) SIGSEGV 试图访问未分配给自己的内存,

Django 高级配置

安稳与你 提交于 2019-12-03 08:31:10
目录 Django 信号 信号系统三要素: 信号的分类: Django 内置信号: 具体 Django 信号内容 定义信号 发送信号 接收信号 信号接收器 防止重复信号 Django 内置信号操作步骤 自定义信号操作步骤 创建文件 自定义信号 自定义信号接收器 自定义 信号发送语句 Django 信号 django自带一套信号机制来帮助我们在框架的不同位置之间传递信息。也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发送给一组接受者(receivers) 信号系统三要素: 信号 <class: django.dispatch.Signal > 的实例 发送方 某一个信号的发送者 接收方 一个或多个信号的接收者 信号的分类: Django 内置信号, 框架内置的 Signal 实例, 发送 方 为 Django 框架 自定义 信号 , 开发者 手动创建 Signal 实例, 且需指定发送方 和 接收方 Django 内置信号: 框架位置: 位于框架 signals.py 文件中。 例如 框架内置的各 app 目录下的 django\contrib\APP\signals.py 文件中 和django\core\signals.py 文件中。 # 在ORM模型的save()方法调用之前或之后发送信号: django.db

进程间通信:信号

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、信号产生、处理、分类 二、signal信号处理机制 五、信号相关函数 六、计时器 信号就像古代战场上打仗,摇什么旗子摆什么阵。双方已经约定好。能不使用信号就不要使用信号,因为是异步。 信号是硬件中断的软件模拟(软中断)。 需要掌握:1到31号信号。 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 信号的产生: 信号的生成来自内核 ,让内核生成信号的请求来自3个地方: 1.用户:用户能够通过输入CTRL+c、Ctrl+\,或者是终端驱动程序分配给信号控制字符的其他任何键来请求内核产生信号; 3.进程:一个进程可以通过系统调用kill给另一个进程发送信号,一个进程可以通过信号和另外一个进程进行通信。 信号的处理: 进程接收到这两个信号后,只能接受系统的默认处理,即终止进程. 钩子:回调函数 默认处理的话,一般会把程序搞崩溃。 进程事先注册信号处理函数。当信号来了的时候 信号的分类: 同步信号:由进程的某个操作产生的信号,例如除0、内存访问违规; 异步信号:由像用户击键这样的进程外部事件产生的信号,再如,ctrl+z.

QT中 QObject::sender():

匿名 (未验证) 提交于 2019-12-03 00:04:02
QT中 QObject::sender(): 1、功能:用于返回发送信号的对象的指针,返回类型为QObject *。当某一个Object emit一个signal的时候,它就是一个sender, 系统会记录下当前是谁emit出这个signal的。你在一个槽里面调用这个函数,就知道是谁触发了这个槽并且可对发信号的对象进行操作。 2、可以解决的问题:可用于一个槽函数接收多个信号,通过sender判断是哪个对象发的信号。 示例代码: ///假如有button1和button2同时连接到该槽 void Widget::Slot_On_Clicked() { QObject * obj = sender(); //返回发出信号的对象,用QObject类型接收 QPushButton *button_tmp = qobject_cast<QPushButton *>(obj); //向下转型为按钮类型 //或者 QPushButton *button_tmp = (QPushButton*) sender(); //强制转换 QString m_ObjectName = button_tmp->text(); //调用发信号者的方法 ///判断是哪个按钮 if(m_ObjectName.compare(QStringLiteral("pushButton_1"))==0) { qDebug()

C++ 信号处理

匿名 (未验证) 提交于 2019-12-02 23:43:01
免费C 语言教程: 阿里云大学――开发者课堂 信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。 有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 <csignal> 中。 信号 描述 SIGABRT abort 。 SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。 SIGILL 检测非法指令。 SIGINT 接收到交互注意信号。 SIGSEGV 非法访问内存。 SIGTERM 发送到程序的终止请求。 signal() 函数 C++ 信号处理库提供了 signal 函数,用来捕获突发事件。以下是 signal() 函数的语法: void (*signal (int sig, void (*func)(int)))(int); 这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;第二个参数是一个指向信号处理函数的指针。 让我们编写一个简单的 C++ 程序,使用 signal() 函数捕获 SIGINT 信号。不管您想在程序中捕获什么信号,您都必须使用 signal 函数来注册信号,并将其与信号处理程序相关联。看看下面的实例: #include <iostream>#include

Python之signal模块详解

匿名 (未验证) 提交于 2019-12-02 22:51:30
先简单说一下Signal是啥.(如果想直接使用可以不看) Signal翻译过来中文就是信号- - 当然, 本身他就是Linux系统编程中非常重要的概念, 信号机制是进程之间传递消息的一种机制, 其全称为软中断信号 作用是通知进程发生了异步事件。进程之间可以调用系统来传递信号, 本身内核也可以发送信号给进程, 告诉该进程发生了某个事件. 注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。 接收信号的进程对不同的信号有三种处理方法 指定处理函数 忽略 根据系统默认值处理, 大部分信号的默认处理是终止进程 然后就是一大段类型了.. Linux系统有两大类信号 POSIX标准的规则信号(regular signal 1-31编号) 实时信号(real-time signal 32-63) 规则信号 信号编号 名称 默认动作 说明 1 SIGHUP 终止 终止控制终端或进程 2 SIGINT 终止 由键盘引起的终端(Ctrl-c) 3 SIGQUIT dump 控制终端发送给进程的信号, 键盘产生的退出(Ctrl-\), 4 GIGILL dusmp 非法指令引起 5 SIGTRAP dump debug中断 6 SIGABRT/SIGIOT dump 异常中止 7 SIGBUS/SIGEMT dump 总线异常/EMT指令 8 SIGFPE dump 浮点运算溢出 9

python学习笔记——多进程间通信——Linux信号基础

a 夏天 提交于 2019-12-02 00:16:58
python学习笔记——信号模块signal 阅读目录(Content) 1 signal基本信号名 2 常用信号处理函数 2.1 设置发送SIGALRM信号的定时器 2.2 设置信号处理函数 3 常用信号处理函数 基于 python学习笔记——多进程间通信——Linux信号基础 的学习基础,进一步学习Python标准库中的signal模块。 尽管signal是python中的模块,但是主要针对UNIX平台(比如Linux,MAC OS),而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号系统的功能。 signal模块负责python程序内部的信号处理;典型的操作包括信号处理函数、暂停并等待信号,以及定时发出SIGALRM等; 1 signal基本信号名 import signal signal.SIGHUP # 连接挂断; signal.SIGILL # 非法指令; signal.SIGINT # 终止进程(ctrl+c); signal.SIGTSTP # 暂停进程(ctrl+z); signal.SIGKILL # 杀死进程(此信号不能被捕获或忽略); signal.SIGQUIT # 终端退出; signal.SIGTERM # 终止信号,软件终止信号; signal.SIGALRM # 闹钟信号,由signal.alarm(

signal()函数

不打扰是莪最后的温柔 提交于 2019-11-30 09:48:14
函数原型 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法。参数func指定程序可以处理信号的三种方式之一: l 默认处理(SIG_DFL): 信号由该特定信号的默认动作处理 l 忽略信号(SIG_IGN): 忽略信号,即使没有意义,代码执行仍然继续。 l 函数处理程序: 定义一个特定的函数来处理信号。 或SIG_DFL要么SIG_IGN被设置为程序启动时每个支持信号的默认信号处理行为。 参数: SIG设置处理功能的信号值,以下宏常量表达式标识标准信号值: 宏 信号 SIGABRT (信号终止)异常终止,例如由…发起的退出功能 SIGFPE (信号浮点异常)错误的算术运算,比如零分频或导致溢出的运算(不一定是浮点运算) SIGILL (信号非法指令)无效的功能图像,例如非法指令。这通常是由于代码中的损坏或尝试执行数据 SIGINT (信号中断)交互式注意信号。通常由应用程序用户生成 SIGSEGV (信号分段违规)对存储的无效访问:当程序试图在已分配的内存之外读取或写入时。 SIGTERM (信号终止)发送到程序的终止请求。 每个库实现可以提供可以与此函数一起使用的附加信号值宏常量。 注意:并不是所有的运行环境都需要生成自动信号,即使在上述特定情况下也是如此

C 轻量级 信号与槽

半城伤御伤魂 提交于 2019-11-29 19:14:28
#ifndef _SIMPLE_SIGNAL_SOLTS_H_ #define _SIMPLE_SIGNAL_SOLTS_H_ #include "string.h" typedef void (*SIMPLE_SIGNAL)(void *signal, void *pArg); typedef void (*SIMPLE_SOLTS) (void *pArg); #define SIMPLE_SOLTS_T(FuncName) void(FuncName)(void *pArg) #define SIMPLE_EMIT(signal, arg) if (signal != NULL)signal(&signal, arg) #define SIMPLE_SIGNAL_SOLTS_MAX_SOLTS 10 //一个信号最多连接槽的数量 #define SIMPLE_SIGNAL_SOLTS_MAX_SIGNAL 10 //信号最多数量 ErrorStatus SimpleSignalSolts_Connect(SIMPLE_SIGNAL *signal, SIMPLE_SOLTS solts); #endif 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /*****************************************