-
鸿鹄论坛上的华为认证H35-211-HCNP-Access Network题库涵盖了可再入函数的相关内容
资源介绍
10.6 可再入函数
进程捕捉到信号并继续执行时,它首先执行该信号处理程序中的指令。如果从信号处理程
序返回(例如没有调用 e x i t或l o n g j m p),则继续执行在捕捉到信号时进程正在执行的正常指令
序列(这类似于硬件中断发生时所做的)。但在信号处理程序中,不能判断捕捉到信号时进程
执行到何处。如果进程正在执行 m a l l o c,在其堆中分配另外的存储空间,而此时由于捕捉到信
号插入执行该信号处理程序,其中又调用 m a l l o c,这时会发生什么 ?又例如若进程正在执行
g e t p w n a m(见6 . 2节)这种将其结果存放在静态存储单元中的函数,而插入执行的信号处理程
序中又调用这样的函数,这时又会发生什么呢 ? 在m a l l o c例中子,可能会对进程造成破坏,因
为m a l l o c通常为它所分配的存储区保持一个连接表,而插入执行信号处理程序时,进程可能正
在更改此连接表。在 g e t p w n a m的例子中,正常返回给调用者的信息可能由返回至信号处理程
序的信息覆盖。
P O S I X . 1说明了保证可再入的函数。表1 0 - 3列出了这些可再入函数。图中四个带*号的函数
并没有按P O S I X . 1说明为是可再入的,但SVR4 SVID 〔AT&T 1989〕则将它们列为是可再入的。
表10-3 信号处理程序中可以调用的可再入函数
_ e x i t f o r k p i p e s t a t
a b o r t * f s t a t r e a d s y s c o n f
a c c e s s g e t e g i d r e n a m e t c d r a i n
a l a r m g e t e u i d r m d i r t c f l o w
c f g e t i s p e e d g e t g i d s e t g i d t c f l u s h
c f g e t o s p e e d g e t g r o u p s s e t p g i d t c g e t a t t r
c f s e t i s p e e d g e t p g r p s e t s i d t c g e t p g r p
c f s e t o s p e e d g e t p i d s e t u i d t c s e n d b r e a k
c h d i r g e t p p i d s i g a c t i o n t c s e t a t t r
c h m o d g e t u i d s i g a d d s e t t c s e t p g r p
c h o w n k i l l s i g d e l s e t t i m e
c l o s e l i n k sigemptyset t i m e s
c r e a t l o n g j m p * s i g f i l l s e t u m a s k
d u p l s e e k s i g i s m e m b e r u n a m e
d u p 2 m k d i r s i g n a l * u n l i n k
e x e c l e m k f i f o s i g p e n d i n g u t i m e
e x e c v e o p e n s i g p r o c m a s k w a i t
e x i t * p a t h c o n f sigsuspend w a i t p i d
f c n t l p a u s e s l e e p w r i t e
第 1 0章 信 号 2 0 9
下载