02 2016 档案
摘要:【摘自《Linux/Unix系统编程手册》】 从某种角度,可将信号视为进程间通信(IPC)的方式之一。然而,信号作为一种 IPC 机制却也饱受限制。首先,与其他 IPC 方法相比,对信号编程既繁且难,具体原因如下: 信号的异步本质就意味着需要面对各种问题,包括可重入性需求、竞争条件及在信号处理器中正
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 较之于标准信号,实时信号的优势如下: 实时信号的信号范围有所扩大,可应用于应用程序自定义的目的。而标准信号中可供应用随意使用的信号仅有两个:SIGUSR1 和 SIGUSR2。 对实时信号所采取的是队列化管理。如果将某一实时信号的多个实例发送给一进程,那
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 核心转储文件 特定信号会引发进程创建一个核心转储文件并终止运行。所谓核心转储是内含进程终止时内存映像的一个文件。将该内存映像加载到调试器中,即可查明信号到达时程序代码和数据的状态。 从 Linux 版本 2.6 开始,可以根据 Linux 特有的 /pr
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 一般而言,将信号处理器函数设计的越简单越好。其中一个重要原因就在于,这将降低引发竞争条件的风险。下面是针对信号处理器函数的两种常见设计: 信号处理器函数设置全局性标志变量并退出。主程序对此标志进行周期性检查,一旦被置位随即采取相应动作。(主程序若因监控一
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 信号集 sigemptyset() 函数初始化一个未包含任何成员的信号集。sigfillset() 函数则初始化一个信号集,使其包含所有信号(包括所有实时信号)。 #include <signal.h> int sigemptyset(sigset_t*
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 每个信号都有一串与之相关的可打印说明。这些描述位于数组 sys_siglist 中。例如,可以用 sys_siglist[SIGPIPE] 来获取 SIGPIPE 信号(管道断开)的描述。然而,较之于直接饮用 sys_siglist 数组,还是推荐使用
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 kill() 一个进程能够使用 kill() 系统调用向另一个进程发送信号。(之所以选择 kill 作为术语,是因为早期UNIX实现中大多数信号的默认行为是终止进程) #include <signal.h> int kill(pid_t pid, int
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 Unix系统提供了两种方式来改变信号处置:signal() 和 sigaction()。 signal() 的行为在不同Unix实现间存在差异,这也意味着对可移植性有所追求的程序绝不能使用此调用来建立信号处理函数。故此,sigaction() 是建立信号
阅读全文
摘要:【摘自《Linux/Unix系统编程手册》】 概述 信号是事件发生时对进程的通知机制。有时也称之为软件中断。信号和硬件中断的类似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。 一个(具有合适权限的)进程能够向另一个进程发送信号。信号的这一用法可作为一种同步技术,甚至是进
阅读全文

浙公网安备 33010602011771号