UNIX环境高级编程第十章上

【1】.信号。所谓的信号就是一种软件中断。内核接受到信号有三种处理方式:忽略,执行默认动作,或者进行捕捉信号(捕捉到信号进行用户自定义的函数操作)。目前我遇到几个用到的信号有:

SIGALRM:超时,在alarm()函数中用到;SIGINT:终端终止符,delete

SIGUSR1,SIGUSR2:用户自定义的信号1,2

SIGCHILD:子进程终止或者停止时,SIGCHILD发送给父进程

【2】.(1)signal函数

形式: void ( *signal ( int signo , void ( *func ) ( int )))( int );

signo是信号名,当函数接收到此信号名,则进行后面的func操作。

func:可以是三种操作,忽略SIG_IGN,执行默认操作SIG_DFL,用户自定义函数操作。

对于第二个参数,这里的int是调用的函数的参数,而在此表达式其实是没有参数的。

(2)执行一个程序时,如果用到了exec则忽略信号,否则均为信号的系统默认操作。信号捕捉函数也可以捕捉父进程得到的相应子进程。

【3】不可靠信号,有几种情况会产生不可靠信号,如:信号发生到调用signal信号之前可能会出现一个新的信号,有些信号不想起发生,但是并不能对其关闭,只能进行忽略操作。

【4】中断的系统调用。保证系统调用执行的完整性不受信号破坏,将系统调用设置为两种:低速系统调用和其他系统调用。低速系统调用保证操作完整性,可能会使进程永远阻塞。包括读写(某些文件),打开(类型文件),pause和wait,进程间通讯ioctl等。

【5】可重入函数,可以在函数执行过程中转而去处理其他函数,返回函数也可以继续进程处理

【6】kill和raise函数。kill(pid_t pid, int signo)//将特定信号signo传送给进程或者进程组pid;raise(int signo)//可以将信号发送给自己

kill函数中,pid== -1时,可以把信号发送给系统所有的进程,当然前提是调用kill函数的用户有权限

【7】alarm函数

unsigned int alarm(unsigned int seconds)//定时器。

(1)返回值:0或者剩余秒数。到达seconds值将产生SIGALRM信号

(2)在原来已经有一个alarm且还没有到超时时间的情况下,设置新的超时时间会重置定时器,函数返回的是以前的剩余时间。特别的如果第二次设置值       为0,则将会取消定时器。

【8】pause函数

使进程挂起直至有信号到达。成功返回-1并将errno设置为EINTR.

程序展示:

【1】10-4

static void sig_alarm(int signo)

{}

unsigned int sleep1(unsigned int nsecs)

{

if(signal(SIGALRM, sig_alrm)== SIG_ERR)   //收到了SIGALRM信号,运行sig_alrm函数

{return(nsecs);}

alarm(nsecs);                                            //第一步,运行此函数,运行完后则发出SIGALRM信号

pause();                                                   //第二等待信号到来。第一步运行完则收到SIGALRM信号

return(alarm(0));                                      //最后

}

【2】

void child_handler(int signo)
{

if(signo == SIGCHLD)
{
printf("end.\n");
wait(NULL);                                        //等着子进程结束了,转去main函数退出 
}
}

int main()
{
int pid;
int i = 0;

signal(SIGCHLD,child_handler);          //子进程结束则产生此信号

if((pid = fork()) < 0)                          //fork产生子进程
{
printf("failed");

}else if(pid == 0)
{
printf("son\n");
}else{
sleep(1);                                          //此处sleep(1)使得程序被挂起,到调用程序捕捉到了信号SIGCHLD,转而执行信号处理程序signal函数。不这样写,函数直接从底下运行跑了

}
exit(0);
}

时间: 2024-10-18 18:59:18

UNIX环境高级编程第十章上的相关文章

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

UNIX环境高级编程笔记之文件I/O

一.看图说话 一图胜过千言,看图! 二.唠一唠 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情.其实大概三年前,那会大三,我就买了这本书,也看过一些,但好像没有留下什么印象,今天再看,依然觉得像新的一样.很大的原因我想是一直以来都在用windows(用windows做开发为什么学不到真正的技术,我想大家都懂的),当然知识结构不完整,学习能力这些就不说了.所以,对于那些致力于想在Linux下做开发的人来说,

《UNIX环境高级编程》学习心得 一

本文内容大部分摘自<UNIX环境高级编程>,附有部分个人心得. 1.unix体系结构 从严格意义上来说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们通常将这种软件称为内核(kernel),因为它相对较小,而且位于环境核心.如图显示unix体系结构. 内核接口被称为系统调用(system call).公用函数库构建在系统调用接口之上,应用程序既可食用公用函数库,也可以使用系统调用.shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口. 从广义上来讲,操作系

OS X下UNIX环境高级编程(第三版)学习日志-第一章ChapterI,编译apue包与第一个例程

1.从网络上获取代码,地址如下apue最新官方下载地址 2.解压到本地 由于最新版本是第三版(3rd Edition),apue.3e,就是我们要的源代码 3.编译源代码 编译过程中笔者并未遇到任何问题,所以建议大家也下载最新版本的代码来学习,贴一下笔者的环境信息 Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple

【转】apue《UNIX环境高级编程第三版》第一章答案详解

原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此,我要感谢网易的一个工程师朋友和室友,没有他们,我不会开始真正的学习这本书,希望大家以后开始慢慢进步.废话少说,直接上课后习题了. UNIX高级编程第一章习题答案: 1.1在系统上验证,除根目录外,目录l和l l是不同的. 答:这个验证有很多方法可使用命令ls .cd.vim等,目录.指向当前目录,目录..指

Unix环境高级编程

Advanced Programming in the UNIX Environment Second Edition Unix 环境高级编程 第二版 目录: 第一章:UNIX基础知识 第二章:UNIX标准化及实现 第三章:文件I/O 第四章:文件和目录 第五章:标准I/O库 第六章:系统数据文件盒信息 第七章:进程环境 第八章:进程控制 第九章:进程关系 第十章:信号 第十一章:线程 第十二章:线程控制 第十三章:守护线程 第十四章:高级I/O 第十五章:进程间通信 第十六章:网络IPC:套接

《Unix环境高级编程》读书笔记 第7章-进程环境

1. main函数 int main( int argc, char *argv[] ); argc是命令行参数的数目,包括程序名在内 argv是指向参数的各个指针所构成的数组,即指针数组 当内核执行C程序时(使用exec函数),在调用main前先调用一个特殊的启动例程.可执行程序文件将此启动例程指定为程序的起始地址——这是由连接器设置的,而连接器则是由C编译器调用.启动例程从内核取得命令行参数和环境变量值,然后按上述方式调用main函数做好安排. 2. 进程终止 有8种方式使进程终止,其中5种

《UNIX环境高级编程(第3版)》

<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series) 原出版社: Addison-Wesley Professional 作者: (美)W. Richard Stevens    Stephen A. Rago 译者: 戚正伟 张亚英 尤晋元 出版社:人民邮电出版社 ISBN:9787

(十二) 一起学 Unix 环境高级编程 (APUE) 之 进程间通信(IPC)

. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)