首页
学习
活动
专区
工具
TVP
发布

linux系统编程之信号(二):一些信号发送函数和不同精度睡眠

kill函数可以给一个指定进程或进程组发送指定信号,其中kill 函数pid 参数取值不同表示不同含义,具体可man 一下。...raise函数可以给当前进程发送指定信号(自己给自己发信号)。killpg 函数可以给进程组发生信号。这三个函数都是成功返回0,错误返回-1。... */ 程序中注册信号在fork之前,故子进程也会继承,在子进程中对进程组发送信号,故信号处理函数会被调用两次: simba@ubuntu:~/Documents/code/linux_programming...即每隔1s就会发送一个SIGALRM信号,其实alarm函数时间到时只发送一次信号,我们在信号处理函数中再次调用alarm函数,造成不断信号发送。...参数 which取值: ITIMER_REAL:经过指定时间后,内核将发送SIGALRM信号给本进程  ITIMER_VIRTUAL :程序在用户空间执行指定时间后,内核将发送SIGVTALRM

1.1K00
您找到你想要的搜索结果了吗?
是的
没有找到

Linux笔记(15)| Linux信号

今天要分享Linux信号机制,信号是一种软件中断,是一种处理异步事件方法,可以很好地在多个进程之间进行同步和简单数据交换。...一、发送信号 发送信号通常有三种方式,分别是使用kill、raise、sigqueue函数 1、kill函数 int kill(pid_t pid,int sig); 第一个参数代表向谁发送,第二个参数代表发送什么信号...; void *sival_ptr; }sigval_t; 这个函数除了发送信号之外,还能携带一些参数,这些参数就保存在共用体里面。...二、信号注册和响应 前面讲了三种发送信号方式,但是光发送信号还不够,对于接收方来说,还得对信号进行处理。 一般可以使用signal函数和sigaction函数来注册信号。...接下来写一个简单代码,来应用一下上面的几个函数。实现需求就是创建一个子进程,父进程每隔一秒钟向子进程发送一个信号,子进程收到信号之后往一个txt文档中写入一句话。

2.5K10

Linux驱动实践:驱动程序如何发送信号】给应用程序?

kill 命令和信号 使用 kill 命令发送信号 关于 Linux 操作系统信号,每位程序员都知道这个指令:使用 kill 工具来“杀死”一个进程: $ kill -9 这个指令功能是...:向指定某个进程发送一个信号 9,这个信号默认功能是:是停止进程。...虽然在应用程序中没有主动处理这个信号,但是操作系统默认处理动作是终止应用程序执行。 除了发送信号 9,kill 命令还可以发送其他任意信号。...在 Linux 系统中,所有的信号都使用一个整型数值来表示,可以打开文件 /usr/include/x86_64-linux-gnu/bits/signum.h(你系统中可能位于其它目录) 查看一下...驱动程序代码示例:发送信号 功能需求 在刚才简单示例中,可以得出下面这些信息: 信号发送方:必须知道向谁[PID]发送信号发送哪个信号; 信号接收方:必须定义信号处理函数,并且向操作系统注册:接收哪些信号

2.7K30

ReactiveCocoa 中 RACSignal 是如何发送信号

用户交互事件绑定 RAC为可交互UI控件提供了一系列发送Signal信号方法。这些数据流会在用户交互中相互传递。...看上图描述,新信号发送长度等于前面两个信号长度之和,concat之后信号结束信号也就是第二个信号结束信号。...有值以后就打包成元组RACTuple发送出去。并清空两个数组0号位置存储值。 以后两个信号每次发送一个,就先存储在数组中,只要有“配对”另一个信号,就一起打包成元组RACTuple发送出去。...从图中也可以看出,zipWith之后信号,每个信号发送时刻是等于两个信号最晚发出信号时刻。 新信号完成时间,是当两者任意一个信号完成并且数组里面为空,就算完成了。...所以最后第一个信号发送5那个值就被丢弃了。 第一个信号依次发送1,2,3,4值和第二个信号依次发送A,B,C,D值,一一合在了一起,就像拉链把他们拉在一起。

1.7K20

Linux驱动实践:中断处理函数如何【发送信号】给应用层?

大家好,我是道哥,今天我为大伙儿解说技术知识点是:【中断程序如何发送信号给应用层】。 最近分享几篇文章都比较基础,关于字符类设备驱动程序,以及中断处理程序。...根据之前文章Linux驱动实践:驱动程序如何发送信号】给应用程序?,应用程序必须主动把自己 PID 告诉驱动模块才可以。...copy_from_user(&g_pid, pArg, sizeof(int)); } } 知道了应用程序 PID,驱动程序就可以在中断发生时候(按下键盘ESC键),发送信号出去了: static...因为只有在按下键盘ESC按键时,驱动程序才会发送信号上来,因此应用程序需要一直存活着。...这可以通过 dmesg 命令输出信息看出来: 这个时候,按下键盘 ESC 键,此时驱动程序中打印如下信息: 说明:驱动程序捕获到了键盘 ESC 键,并且发送信号给应用程序了。

3.2K51

Linux】进程信号 --- 信号产生 保存 捕捉递达

二、信号发送(修改PCB信号位图) 1.通过键盘发送信号(kill指令 和 热键) 1....平常在我们终止前台进程时候,大家第一感受就是只要我们按下组合键ctrl+c,进程就会被立马终止,所以我们感觉进程应该是立马处理了我们发送信号啊,怎么是待会儿处理这个信号呢?...除我们主动调用系统调用或通过键盘发送指令外,软件本身其实也可以自发发送信号,比如这个部分所讲硬件异常导致软件自发发送信号。...,键盘kill或组合热键不是通过kill系统调用吗?...此时内核态身份还正好执行这样恶意攻击访问内核资源代码,这不完蛋了吗?

1.5K10

linux | kill命令详解以及linux信号

简介# kill命令很容易让人产生误解, 以为仅仅是用来终止linux进程....在man手册中对kill命令解释如下, 不难看出, kill命令是一个用于将指定signal发送给进程工具 DESCRIPTION The command kill sends the specified..., 在这些信号中只有9) SIGKILL可以无条件地终止process, 其他信号都将依照process中定义信号处理规则来进行忽略或者处理....上述信号中常用其实很少, 如下表所示 编号 名称 解释 1 SIGHUP 启动被终止程序, 也可以让进程重新读取自己配置文件, 类似重新启动 2 SIGINT 相当于输入 ctrl-c 来中断一个程序...常用命令# 以正常方式终止进程, 由于信号15是最常用也是最佳程序退出方式, 所以 kill 命令不指定信号时, 默认使用就是信号 15 kill pid # 或者 kill -15 pid 强制终止进程

2.4K60

JavaMail邮件发送-发送附件和带背景音乐邮件小系统

这里使用是JavaMail技术,前台使用了fckeditor做邮件美化,由于只是示例,后台发送时只是将邮件保存在本地,但是可以查看,如果需要实际发送,请参考我其他博客文章,我写了很多关于邮件发送示例...---- 发送一封简单 E-mail 下面是一个发送简单E-mail例子。假设你本地主机已经连接到网络。 SendEmail.java 文件代码: ? ?...发送一封 HTML E-mail 下面是一个发送 HTML E-mail 例子。假设你本地主机已经连接到网络。...编译并运行此程序来发送HTML e-mail: $ java SendHTMLEmailSent message successfully.... ---- 发送带有附件 E-mail 下面是一个发送带有附件...假设你本地主机已经连接到网络。 SendFileEmail.java 文件代码: ? ? 编译并运行你程序来发送一封带有附件邮件。

1K30

linux系统编程之信号(四):信号捕捉与sigaction函数

一、内核如何实现信号捕捉 如果信号处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。由于信号处理函数代码是在用户空间,处理过程比较复杂,举例如下: 1....signo是指定信号编号。若act指针非空,则根据act修改该信号处理动作。若oact指针非空,则通过oact传出该信号原来处理动作。...当某个信号处理函数被调用时,内核自动将当前信号加入进程信号屏蔽字,当信号处理函数返回时自动恢复原来信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生,那么它会被阻塞到当前处理结束为止。...()实现; 《Linux 多线程应用中如何编写安全信号处理函数》 http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/ 参考:《APUE...》、《linux c 编程一站式学习》

2.9K00

Python编写Linux邮件发送工具

之前有用过Linux自带mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他unix like操作系统也有需求...,那就太麻烦了,所以我用自带python2.6.6和自带邮件相关库写了个小工具,使用步骤如下: 一、申请一个163邮箱,作为发件箱。...附件,可以是绝对或相对路径,例如: --attach attachment.log 或者 --attach /var/log/attachment.log Ps:目前此脚本只支持一个附件,暂无发送多个附件需求...exit(-1) else: pass return {'s':subject,'c':content,'d':destAddr,'a':attachment,} #发送邮件...to_addr, msg.as_string()) server.quit() if __name__=='__main__': main() 三、更改权限后就可以在安装了python服务器上发送邮件啦

69440

Linux 进程间通信:信号

由于其叫法中包含“信号”这个关键字,所以容易跟另一个信号signal搞混。在这里首先强调一下,Linux系统中semaphore信号量和signal信号是完全不同两个概念。...但是从本质上讲,信号量实际上是实现了一套可以实现类似锁功能原语,我们不仅可以用它实现锁,还可以实现其它行为,比如经典PV操作。 Linux环境下主要实现信号量有两种。...如果当前有进程使用sem_wait等待此信号量,POSIX可以允许有两种返回,一种是返回0,另一种是返回一个负值,这个负值绝对值就是等待进程个数。Linux默认实现是返回0。...另外要注意是,这些程序在编译时候需要加额外编译参数-lrt和-lpthread。 最后 希望这些内容对大家进一步深入了解Linux信号量。...如果你喜欢本文,欢迎在微博上搜索“orroz”关注我,地址是:http://weibo.com/orroz 大家也可以在微信上搜索:Linux系统技术 关注我公众号。

6.5K01

linux信号保存和递达处理

---- 一、递达,阻塞,未决         我们知道,信号发送给进程,而进程又是被操作系统创建pcb(信号相关信息被保存到进程pcb中)而进行管理,所以修改或者访问进程pcb都需要操作系统来进行...,那么信号发送本质就是:操作系统在向进程发送信号。        ...首先信号相关信息都在进程pcb中存储,判断信号发送给进程后状态都是位图来实现。         ...(因为该信号被递达前,会将pending中对应那一位由1改为0),若结束递达后,同类型仍发送,则会继续重复上面的动作。...但若结束递达后,同类型信号没有发送了,进程就只会再捕捉一次,将pending中1改为0。递达后则继续检其他信号进行递达。

14020

Linux系统中信号量机制

; }; 在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。...semaphore *sem); //初始化信号值为0 3、信号原子操作: p操作: void down(struct semaphore *sem); //用来获取信号量,如果信号量值大于或等于...定义三个信号量:s1用于实现对缓冲池互斥操作,empty表示空缓冲区个数,full表示满缓冲区个数。...问题分析:进程对文件互斥访问实现可借助一个信号量就可以搞定,但是我们需要引入一个count变量来记录reader进程个数,对这个变量访问也是互斥,所以也需要引入一个信号量。...定义信号量rs实现对count互斥访问,定义ws实现对文件互斥访问。

2.5K60

linux 信号sigabrt,關於LinuxSIGABRT信號

UNIX支持信號,是不可靠信號(非實時),編號為32 ~ 63信號是后來擴充,稱做可靠信號(實時信號)。...登錄Linux時,系統會分配給登錄用戶一個終端(Session)。在這個終端運行所有程序,包括前台進程組和后台進程組,一般都屬於這個 Session。...當用戶退出Linux登錄時,前台進程組和后台有對終端輸出進程將會收到SIGHUP信號。這個信號默認操作為終止進程,因此前台進 程組和后台有終端輸出進程就會中止。...不過可以捕獲這個信號,比如wget捕獲SIGHUP信號,並忽略它,這樣就算退出了Linux登錄,wget也 繼續下載。 此外,對於與終端脫離關系守護進程,這個信號用於通知它重新讀取配置文件。...它與SIGSEGV區別在於后者是由於對合法存儲地址非法訪問觸發(如訪問不屬於自己存儲空間或只讀存儲空間)。 8) SIGFPE 在發生致命算術運算錯誤時發出.

1.9K20

Linux 进程信号基本概念、信号类型、信号处理方式、信号传递机制以及如何使用进程信号进行进程间通信、异常处理

当一个进程需要发送一个信号给另一个进程时,可以调用 kill 系统调用或向指定进程发送信号。当一个进程接收到一个信号时,操作系统会做出相应处理,并将信号交给进程信号处理函数处理。...信号传递机制在 Linux 中,进程可以通过 kill 系统调用向其他进程发送信号。...当一个进程需要向另一个进程发送信号时,可以指定信号接收进程 PID 和信号类型,例如:kill -SIGINT 1234这条命令会向进程号为 1234 进程发送 SIGINT 信号,即中断进程。...除了通过 kill 命令向其他进程发送信号外,Linux 中还有一种叫做信号队列(Signal Queue)机制。...需要注意是,信号发送和接收是异步,即发送进程并不知道接收进程何时接收到信号,也不知道接收进程何时完成信号处理。因此,进程在处理信号时需要注意信号并发性和可重入性问题。5.

95600
领券