linux内核中的信号机制--一个简单的例子

标签: linux 内核 信号 | 发表时间:2013-02-04 09:57 | 作者:ce123
出处:http://blog.csdn.net

linux内核中的信号机制--一个简单的例子

Author:ce123(http://blog.csdn.net/ce123)


信号机制是类UNIX系统中的一种重要的进程间通信手段之一。我们经常使用信号来向一个进程发送一个简短的消息。例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置为可中断等待状态(TASK_INTERRUPTIBLE),此时我们已经失去耐心,想提前结束这个进程,于是可以通过kill命令想这个进程发送KILL信号,内核会唤醒该进程,执行它的信号处理函数,KILL信号的默认处理是退出该进程。当然并不是一定要进程处于TASK_INTERRUPTIBLE状态时才能够处理信号。

另外应用程序可以通过signal()等函数来为一个信号设置默认处理函数。例如当用户按下CTRL+C时,shell将会发出SIGINT信号,SIGINT的默认处理函数是执行进程的退出代码,但是下面的例子把SIGINT的响应函数设置为int_handler。

#include <signal.h>
#include <stdio.h>

void int_handler()
{
	printf("\nSIGINT signal handler.\n");
	printf("exit.\n");
	exit(-1);
}

int main()
{
	signal(SIGINT, int_handler);
	printf("int_handler set for SIGINT\n");

	while(1)
	{
		printf("go to sleep.\n");
		sleep(60);
	}

	return 0;
}
当执行上面这段代码时,先执行main函数,设置SIGINT的处理函数,并进入睡眠状态,进程进入可中断等待状态:


按下CTRL+C后,进程会被唤醒执行SIGINT的处理函数int_handler()这个函数,进程会退出。

· 信号的分发和处理是在内核态进行的,当从上面的例子中可以看书,信号的处理函数可能是在用户态,在这种情况下,内核需要内核态构建一个临时的用户态环境,然后调用用户态的信号处理函数。

作者:ce123 发表于2013-2-4 9:57:37 原文链接
阅读:48 评论:0 查看评论

相关 [linux 内核 信号] 推荐:

linux内核中的信号机制--一个简单的例子

- - CSDN博客推荐文章
linux内核中的信号机制--一个简单的例子. 信号机制是类UNIX系统中的一种重要的进程间通信手段之一. 我们经常使用信号来向一个进程发送一个简短的消息. 例如:假设我们启动一个进程通过socket读取远程主机发送过来的网络数据包,此时由于网络因素当前主机还没有收到相应的数据,当前进程被设置为可中断等待状态(TASK_INTERRUPTIBLE),此时我们已经失去耐心,想提前结束这个进程,于是可以通过kill命令想这个进程发送KILL信号,内核会唤醒该进程,执行它的信号处理函数,KILL信号的默认处理是退出该进程.

linux信号机制 - 用户堆栈和内核堆栈的变化

- liyuan - C++博客-首页原创精华区
此文只简单分析发送信号给用户程序后,用户堆栈和内核堆栈的变化. 没有分析实时信号,当然整个过程基本一致. 很多参考了<情景分析>,所以有些代码和现在的内核可能不同,比如RESTORE_ALL,但大体的机制是类似的. 2.1 编译运行该程序,并设置断点在sig_int函数开头(0x80482e8),并设置SIGINT信号的处理方式.

Linux 内核优化

- - CSDN博客系统运维推荐文章
声明:本文档来自互联网整理部份加自已实验部份所得:. TCP 服务器 <---> 客户端通信状态.           ACK--------------->                                          建立连接.                    <---------------未回复.

Linux内核里的智能指针

- 浪客 - 博客园-首页原创精华区
众所周知,C/C++语言本身并不支持垃圾回收机制,虽然语言本身具有极高的灵活性,但是当遇到大型的项目时,繁琐的内存管理往往让人痛苦异常. 现代的C/C++类库一般会提供智能指针来作为内存管理的折中方案,比如STL的auto_ptr,Boost的Smart_ptr库,QT的QPointer家族,甚至是基于C语言构建的GTK+也通过引用计数来实现类似的功能.

Linux 内核参数优化(for oracle)

- - CSDN博客数据库推荐文章
    Oracle 不同平台的数据库安装指导为我们部署Oracle提供了一些系统参数设置的建议值,然而建议值是在通用的情况下得出的结论,并非能完全满足不同的需求. 使用不同的操作系统内核参数将使得数据库性能相差甚远. 本文描述了linux下几个主要内核参数的设置,供参考.   共享内存是在系统内核分配的一块缓冲区,多个进程都可以访问该缓冲区.

“Linux”不等同于Linux内核:构建Linux系统的8个软件包

- - 极客范 - GeekFan.net
Linux发行版并不仅仅是Linux内核. 所有的Linux发行版都包含了除内核之外的一些必要的软件包,比如Grub引导程序、Bash shell、GNU shell工具软件、守护进程、X.org图形服务器和桌面环境等等. 所有这些不同的程序均由相互独立的开发小组开发. 这些程序被Linux发行版集成到一起从而形成一套完整的“Linux”操作系统.

Linux 中用 strace 追踪系统调用和信号值

- - 博客园_iTech's Blog
原文地址: http://www.dbabeta.com/2009/strace.html. 打开man strace,我们能看到对strace的最简洁的介绍就是”strace – trace system calls and signals”. 实际上strace是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的.

Google 向新版 Linux 内核贡献技术

- flypen - 谷奥——探寻谷歌的奥秘
本月初刚刚发布的 Linux 2.6.35 版内核中,包含了 RPS 和 RFS 这两项由 Google 贡献的新技术. RPS 的全称是 Receive Packet Steering,这项技术将流入的数据包分布给所有可用的 CPU 去处理,而 RFS (Recevie Flow Steering) 则负责计算哪个核心最适合处理哪项工作.

Linux Kernel 3.0 内核文件系统EXT4 与 Btrfs测试比较

- Power - cnBeta.COM
EXT4文件系统大家可能都比较熟悉了,现在流行的ubuntu 11.04和Fedora15都是默认采用的EXT4,ext4是Linux的第四代扩展文件系统,是EXT3的后继版本. Btrfs 被称为是下一代 Linux 文件系统. 近年来 ext2/3 遇到越来越多的扩展性问题,在期待 ext4 的同时,人们发现了 btrfs,据说它采用了很多先进的文件系统设计,不仅解决了 ext2/3 的扩展性问题,还让人们看到了下一代文件系统所具有的许多其他特性.

Linux 3.1 内核将支持无线局域网唤醒

- bamerl - Wow! Ubuntu
Linux 操作系统早已支持局域网唤醒 (WOL) ,而下一版本的 Linux 3.1 Kernel 系统内核将会引入无线局域网唤醒,简称 WWOL. 和有线版本类似,无线局域网唤醒可以让系统在进入挂起状态 (ACPI S3) 或者另一种低功耗状态的同时继续保持无线连接处于开启状态,而一旦接到用户的特定操作,或者从AP断开连接,就会将系统唤醒,并恢复到原始状态.