linux信号【4】相关函数kill&raise&alarm&pause

文章目录

kill

k i l l函数将信号发送给进程或进程组。

int kill(pid_t p i d, int s i g n o) ;

k i l l的p i d参数有四种不同的情况:

  1. p i d > 0 将信号发送给进程I D为p i d的进程。
  2. p i d == 0 将信号发送给其进程组I D等于发送进程的进程组I D,而且发送进程有许可权向其发送信号的所有进程。 这里用的术语“所有进程”不包括实现定义的系统进程集。对于大多数 U N I X系统,系统进程集包括: 交换进程(pid 0),init
    (pid 1)以及页精灵进程(pid 2)。
  3. pid < 0 将信号发送给其进程组I D等于p i d绝对值,而且发送进程有许可权向其发送信号的所有进程。如上所述一样,“所有进程”并不包括系统进程集中的进程
  4. pid == -1 POSIX.1未定义此种情况。

P O S I X . 1将信号编号0定义为空信号。如果s i g n o参数是0,则k i l l仍执行正常的错误检查,但不发送信号。这常被用来确定一个特定进程是否仍旧存在。如果向一个并不存在的进程发送空信号,则k i l l返回-1,e r r n o则被设置为E S R C H。

raise

r a i s e函数则允许进程向自身发送信号。

int raise(int s i g n o) ; 两个函数返回:
若成功则为0,若出错则为- 1

alarm

使用a l a r m函数可以设置一个时间值(闹钟时间),在将来的某个时刻该时间值会被超过。当所设置的时间值被超过后,产生 S I G A L R M信号。如果不忽略或不捕捉此信号,则其默认动作是终止该进程。

unsigned int alarm(unsigned int s e c o n d s) ;
返回:0或以前设置的闹钟时间的余留秒数

要了解的是,经过了指定秒后,信号由内核产生,由于进程调度的延迟,进程得到控制能够处理该信号还需一段时间。每个进程只能有一个闹钟时间。如果在调用 a l a r m时,以前已为该进程设置过闹钟时间,而且它还没有超时,则该闹钟时间的余留值作为本次 a l a r m函数调用的值返回。以前登记的闹钟时间则被新值代换。如果有以前登记的尚未超过的闹钟时间,而且 s e c o n d s值是0,则取消以前的闹钟时间,其余留值仍作为函数的返回值。虽然S I G A L R M的默认动作是终止进程,但是大多数使用闹钟的进程捕捉此信号。如果此时进程要终止,则在终止之前它可以执行所需的清除操作

pause

p a u s e函数使调用进程挂起直至捕捉到一个信号。只有执行了一个信号处理程序并从其返回时, p a u s e才返回。在这种情况下, p a u s e返回- 1,e r r n o设置为E I N T R。

int pause(void);
返回:- 1,e r r n o设置为E I N T R

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值