新闻中心

EEPW首页>嵌入式系统>设计应用> 进程间通信之:信号

进程间通信之:信号

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257126.htm

2.alarm()和pause()

(1)函数说明。

alarm()也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它就向进程发送SIGALARM。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm()之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。

pause()函数是用于将调用进程挂起直至捕捉到为止。这个函数很常用,通常可以用于判断是否已到。

(2)函数格式。

表8.9列出了alarm()函数的语法要点。

表8.9 alarm()函数语法要点

所需头文件

#includeunistd.h>

函数原型

unsignedintalarm(unsignedintseconds)

函数传入值

seconds:指定秒数,系统经过seconds秒之后向该进程发送SIGALRM信号

函数返回值

成功:如果调用此alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0

出错:-1

表8.10列出了pause()函数的语法要点。

表8.10 pause()函数语法要点

所需头文件

#includeunistd.h>

函数原型

intpause(void)

函数返回值

-1,并且把error值设为EINTR

(3)函数实例。

该实例实际上已完成了一个简单的sleep()函数的功能,由于SIGALARM默认的系统动作为终止该进程,因此程序在打印信息之前,就会被结束了。代码如下所示:

/*alarm_pause.c*/

#includeunistd.h>

#includestdio.h>

#includestdlib.h>

intmain()

{

/*调用alarm定时器函数*/

intret=alarm(5);

pause();

printf(Ihavebeenwakenup.n,ret);/*此语句不会被执行*/

}

$./alarm_pause

Alarmclock

想一想

用这种形式实现的sleep()功能有什么问题?

8.3.3信号的处理

在了解了信号的产生与捕获之后,接下来就要对信号进行具体的操作了。从前面的信号概述中读者也可以看到,特定的信号是与一定的进程相联系的。也就是说,一个进程可以决定在该进程中需要对哪些信号进行什么样的处理。例如,一个进程可以选择忽略某些信号而只处理其他一些信号,另外,一个进程还可以选择如何处理信号。总之,这些都是与特定的进程相联系的。因此,首先就要建立进程与其信号之间的对应关系,这就是信号的处理。

注意

请读者注意信号的注册与信号的处理之间的区别,前者信号是主动方,而后者进程是主动方。信号的注册是在进程选择了特定信号处理之后特定信号的主动行为。

信号处理的主要方法有两种,一种是使用简单的signal()函数,另一种是使用信号集函数组。下面分别介绍这两种处理方式。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

模拟信号相关文章:什么是模拟信号


linux相关文章:linux教程


数字通信相关文章:数字通信原理


通信相关文章:通信原理




评论


相关推荐

技术专区

关闭