码迷,mamicode.com
首页 > 其他好文 > 详细

APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

时间:2017-06-17 22:38:48      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:line   UI   dea   sof   void   不同   sig   targe   sans   

转载注明出处:Windeal学习笔记

kil和raise

kill()用来向进程或进程组发送信号

raise()用来向自身进程发送信号。
#include <signal.h>
int kill(pid_t pid,int signo);
int raise(int signo);
                                                           Both return: 0 if OK,?1 on error

kill向进程号为pid的进程发送signo信号
能够看出 以下两行代码是等价的:
kill(getpid(), signo);
raise(signo);

对于kill函数,其參数pid有四种不同情况:
pid > 0          表示向进程号为pid的进程发送信号。
pid==0         将信号发送给同一进程组 且发送进程具有向其发送信号权限 的全部进程(“全部进程”包含系统实现定义的系统进程集
pid < 0          将信号发送给进程组id为pid绝对值  且发送进程具有向其发送信号权限 的进程(“全部进程”包含系统实现定义的系统进程集
pid == -1       将信号发送给 发送进程具有发送信号权限的 全部进程(“全部进程”包含系统实现定义的系统进程集

上面提到发送权限,  发送进程具有发送信号的权限指的是,发送进程的RUID或者EUID 等于 接收进程的RUID或者EUID

signo为0
 kill(pid,0);运行错误測试,但不发送信号。
也就是说。kill(pid,0)。能够用来測试进程号为pid的进程是否存在。
假设进程不存在,kill()返回-1 ,且errno被置为ESRCH

alarm

原型:
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
<span style="white-space:pre">					</span>Returns: 0 or number of seconds until previously set alarm
指定seconds秒后产生SIGALARM信号。在不忽略、不捕获SIGALARM时。系统默认动作为终止调用该定时器的进程。
每一个进程仅仅有一个闹钟。
所以在调用alarm时,假设进程已有闹钟。且还为超时——将剩余时间作为alarm()函数返回值,用新时间seconds替代旧时间。
进一步,假设假设进程已有闹钟。且还为超时而本次alarm的seconds參数为0,则取消曾经的闹钟,并将剩余时间作为返回值。


pause

原型:
#include <unistd.h>
int pause(void);
                      Returns:?1 with errno set to EINTR
pause能够使进程休眠。直到发生一个信号。











APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

标签:line   UI   dea   sof   void   不同   sig   targe   sans   

原文地址:http://www.cnblogs.com/gccbuaa/p/7041394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!