易截截图软件、单文件、免安装、纯绿色、仅160KB

LINUX下多线程和信号

说实话,信号是我讨厌的东西,在我些的代码中,我都想用最简单的办法来处理它,现在遇到多线程中信号的处理,APUE中的说法也看得不是很懂,CSDN中一位朋友有如下的总结,先记在这里。
1. 默认情况下,信号将由主进程接收处理,就算信号处理函数是由子线程注册的
2. 每个线程均有自己的信号屏蔽字,可以使用sigprocmask函数来屏蔽某个线程对该信号的响应处理,仅留下需要处理该信号的线程来处理指定的信号。
3. 对某个信号处理函数,以程序执行时最后一次注册的处理函数为准,即在所有的线程里,同一个信号在任何线程里对该信号的处理一定相同
4. 可以使用pthread_kill对指定的线程发送信号
APUE的说法:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有的线程共享的,
这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为后,所
有的线程都共享这个处理行为的改变。这样如果一个线程选择忽略某个信号,而其他线程可
以恢复信号的默认处理行为,或者为信号设置一个新的处理程序,从而可以撤销上述线程的
信号选择。
进程中的信号是送到单个线程的,如果信号与硬件故障或者计时器超时有关,该型号就被发
送到引起该事件的线程中去,而其他的信号则被发送到任意一个线程。
sigprocmask的行为在多线程的进程中没有定义,线程必须使用pthread_sigmask
总结:一个信号可以被没屏蔽它的任何一个线程处理,但是在一个进程内只有一个多个线程共用的处理函数。


相关文档:

linux 新增系统调用


此文于2010-02-26被推荐到CSDN首页
如何被推荐?
最近在研究 Linux
内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux
新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线
程服务器的常用编程模型》
的一个注脚。
< type="te ......

Linux use notes

-----------------------------
Based on Fedora 8 version:
-----------------------------
1. No common command like ifconfig in os?
Root cause is the standard search path not include /sbin and /usr/sbin. Try to include them in /etc/profile. As belows:
 #Kenny add /sbin and /usr/sbin here.
&n ......

Linux中的内存分配和释放之__alloc_boot函数分析

 对于这个函数,其实是很多宏定义调用的函数,其中alloc_bootmem_low_pages(x)是其中一个调用它的宏,大家可以认为这些宏只是把这个__alloc_bootmem实质性的函数进行了封装。#define alloc_bootmem_low_pages(x)相当于__alloc_bootmem((x), PAGE_SIZE, 0),就是从0地址开始的低端内存分配按页大小对齐的内存。好了,为 ......

linux 终端启动程序inittab

一、什么是init
  init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。
  内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。
  内核 ......

Linux驱动开发学习步骤

1. 学会写简单的makefile
    2. 编一应用程序,可以用makefile跑起来
    3. 学会写驱动的makefile
    4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
  &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号