EINTR、ERESTARTSYS和SIGINT】的更多相关文章

1. 驱动使用down_interruptible,并在该函数返回非零值时返回-EINTR:应用程序不处理signal,使用CTRL-C退出应用程序: 驱动从down_interruptible返回,应用程序Terminate. 2. 驱动使用down_interruptible,并在该函数返回非零值时返回-ERESTARTSYS:应用程序不处理signal,使用CTRL-C退出应用程序: 驱动从down_interruptible返回,应用程序Terminate. 3. 驱动使用down_in…
v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 7.8 pt 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-s…
为了使大家更加深入了解epoll模型在企业应用中的使用,下面给出一段基于epoll的服务器代码,并在代码中添加了详细注释: #include <deque> #include <map> #include <vector> #include <pthread.h> #include <semaphore.h> #include <time.h> #include <sys/time.h> #include <sys/…
#include <deque> #include <map> #include <vector> #include <pthread.h> #include <semaphore.h> #include <time.h> #include <sys/time.h> #include <sys/shm.h> #include <errno.h> #include <sys/types.h>…
驱动中如果down_interruptible之类的函数被信号中断,驱动可以返回-EINTR或-ERESTARTSYS. 区别在于: 若返回-EINTR,应用程序执行的系统调用会返回表示错误的值,且errno=EINTR: 若返回-ERESTARTSYS,系统会自动重新启动应用程序执行的系统调用,即应用程序的系统调用不会返回.…
Linux中的EAGAIN含义   在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据:由于是异步的,write\send将要发送的数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收…
最近在公司项目中突然报错如下 “connect: Interrupted system call”, 经过查找代码发现是在创建 socket 中执行了 connect 函数失败导致.上网查阅资料发现这是 信号中断EINTR 与 慢系统调用 的问题. 慢系统调用:可能永远阻塞的系统调用. EINTR说明:如果进程在一个慢系统调用(slow system call)中阻塞时,当捕获到某个信号且相应信号处理函数返回时,这个系统调用被中断,调用返回错误,设置errno为EINTR(相应的错误描述为“In…
慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用.永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类.如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证. EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误.例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致…
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #include <signal.h> #include <sys/s…
转自:http://blog.csdn.net/dai_xiangjun/article/details/41871647 SIGQUIT 在POSIX兼容的平台,SIGQUIT是其控制终端发送到进程,当用户请求的过程中执行核心转储的信号. SIGQUIT通常可以ctrl+ .在Linux上,人们还可以使用Ctrl-4或虚拟控制台,SysRq yek. SIGTERM SIGTERM是杀或的killall命令发送到进程默认的信号.它会导致一过程的终止,但是SIGKILL信号不同,它可以被捕获和解…
SIGHUP     终止进程     终端线路挂断SIGINT     终止进程     中断进程SIGQUIT   建立CORE文件终止进程,并且生成core文件SIGILL   建立CORE文件       非法指令SIGTRAP   建立CORE文件       跟踪自陷SIGBUS   建立CORE文件       总线错误SIGSEGV   建立CORE文件       段非法错误SIGFPE   建立CORE文件       浮点异常SIGIOT   建立CORE文件      …
[how to deal with EINTR fault] EINTR:interupted error.是指一个调用被信号给中断,对于同步的耗时调用来说,这个操作常见,譬如select.read.write.SocketServer.py中有一个_eintr_retry()函数提供了解决此种问题的方法,就是当发现错误号是EINTR时,重新执行上个操作. 参考:http://docs.python.org/2.7/library/exceptions.html?highlight=oserro…
EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候.例如,以 O_NONBLOCK的标志打开文件/socket/FIFO…
转自:http://www.xuebuyuan.com/1470645.html 最近在工作中遇到了EINTR错误,感到比较困惑,几番研究之后,颇有心得和收获,特记录如下,便于以后查询,也给有同样困惑的朋友们提供一点借鉴. 我们经常在网络编程中会看到这样,当执行一个可能会阻塞的系统调用后,在返回的时候需要检查下错误码(if errno == EINTR),如果是这样的错误,那我们一般会重新执行该系统调用.所以经常的写法是: repeat: if(read(fd, buff, size) < 0)…
转自:http://blog.chinaunix.net/uid-21501855-id-4490453.html 这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 <unp >,采用continue或者goto again循环解决的.但是感觉这个还是很有必要记录一下.网络上查找到的信息很多.下面是我查找到的和EINTR有关的介绍: 1  http://blog.csdn.net/yanook/article/details/7226019  慢系统调用函数如何处理中断信号EI…
信号  ( signal ) 机制是 UNIX 系统中最为古老的进程间通信机制,很多条件可以产生一个信号. 信号的产生: 1,当用户按下某些按键时,产生信号. 2,硬件异常产生信号:除数为 0 ,无效的存储访问等等.这些情况通常由硬件检测到,将其通知内核, 然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个 SIGSEGV 信号. 3,进程用 kill 函数 将信号发送给另一个进程. 4,用户可用 kill 命令将信号发送给其他进程. 信号类型 - SIGHUP SI…
signal 的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示忽略掉该信号而不做任何处理).signal如果调用成功,返回以前该信号的处理函数的地址,否则返回 SIG_ERR. sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不同的信号可以注册同一个信号捕捉函数.该函数只有一个参数,表示信号值.示例:…
一.SIGINT.SIGTERM和SIGKILL区别 SIGINT与SIGTERM区别1)SIGINT关联ctrl+c2)SIGINT只能结束前台进程3)通过ctrl+c对当前进程发送结束信号,信号被进程树接收到(即:不仅当前进程,子进程也会收到结束信号) SIGTERM与SIGKILL1)SIGTERM可以被阻塞.处理和忽略:因此有的进程不能按预期的结束2)kill不使用参数:发送SIGTERM信号,只有当前进程收到信号,若当前进程被kill,则子进程的父进程就会更改为init,即pid为13…
2) SIGINT程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程. 3) SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号. 15) SIGTERM程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理.通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号.如…
https://www.cnblogs.com/flyfish10000/articles/2576885.html EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误.例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使accept返回一个EINTR错误(被中断的系统调用). 当碰到EINTR错误的时候,可以采取有一些可以重启的系统调用要进…
https://haoqchen.site/2018/04/28/ROS-node-init/ #include "ros/ros.h" #include <signal.h> void MySigintHandler(int sig) { //这里主要进行退出前的数据保存.内存清理.告知其他节点等工作 ROS_INFO("shutting down!"); ros::shutdown(); } int main(int argc, char** arg…
SIGHUP /* hangup */       ~~~~~~      SIGHUP,hong up ,挂断.本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联.       ~~~~~~      登录Linux时,系统会分配给登录用户一个终端(Session).在这个终端运行的所有程序,包括前台进程组和 后台进程组,一般都属于这个 Session.当用户退出Linux登录时,前台进程组和后台有…
慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用.永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类.如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证.EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获某个信号且相应信号处理函数返回时,该系统调用可能返回一个EINTR错误.例如:在socket服务器端,设置了信号捕获机制,有子进程,当在父进程阻塞于慢系统调用时由父进程捕获到了一个有效信号时,内核会致使…
SIGHUP:hong up 挂断.本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联.登录Linux时,系统会分配给登录用户一个终端(Session).在这个终端运行的所有程序,包括前台进程组和 后台进程组,一般都属于这个 Session.当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号.这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中…
三者都是结束/终止进程运行. 1.SIGINT SIGTERM区别 前者与字符ctrl+c关联,后者没有任何控制字符关联. 前者只能结束前台进程,后者则不是. 2.SIGTERM SIGKILL的区别 前者可以被阻塞.处理和忽略,但是后者不可以.KILL命令的默认不带参数发送的信号就是SIGTERM.让程序有好的退出.因为它可以被阻塞,所以有的进程不能被结束时,用kill发送后者信号,即可.即:kill -9 进程号. 内容正确性未验证,转载自https://www.cnblogs.com/al…
基于linux master v4.9版本 信号是异步的, 一.信号何时来 信号是异步的,对于一个进程随时都会接收到信号. 二.选择线程(task)来处理 那么一个进程接收到信号时,需要选择一个task来处理.如何选择呢? 三.使线程达到能够处理信号的状态 设置信号的pending flag. 1)对于睡眠线程 a)处于TASK_INTERRUPTIBLE,唤醒,系统调用返回 while (dev->current_len == GLOBALFIFO_SIZE) { if (filp->f_f…
转自:http://blog.chinaunix.net/uid-24774106-id-4061386.html Linux编程,信号是一个让人爱恨交加又不得不提的一个领域.最近我集中学习了Linux的signal相关的内容,分享出来,也为防止自己忘记.     信号的本质是异步.异步一这个词,听着高端大气上档次,又让人云山雾绕,其则不然.其实我们想想,我们这个世界是异步的,每个人干事儿,并不总是A->B->C->D这种.比如我在网上买了东西,我其实并不知道快递几时能到.我可能在公司里…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1. Linux信号 1.1注册信号处理函数 1.2 信号的发送 1.3 信号的处理 2 linux 多线程信号 1. Linux信号 涉及硬件底层,本文以X86平台讲解. 信号是事件发生时对进程的通知机制,是操作系统提供的一种软件中断.信号提供了一种异步处理事件的方法,信号与硬件中断的相似之处在于打断了程序执行的正常流程,例如,中断用户键入中…
pause函数:       功能:让进程暂停直到信号出现   #include<unistd.h>      intpause();    函数说明:pause()会令目前的进程暂停(进入睡眠状态),直至信号(signal)所中断. 返回值:只返回-1. #include<stdio.h> #include<unistd.h> void deal() { printf(“信号干扰!\n”); } void main() { printf(“进程执行!\n”); sig…
我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意把Token的值改成你自己的值,然后在微信后台填对你的服务器的公网IP,提交就可以通过验证了 #coding=utf-8 html = '''True ''' import socket import signal import errno import re import os import ha…