转载注明出处: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的更多相关文章

  1. APUE学习笔记——10.可靠信号与不可靠信号

    首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1 ...

  2. APUE学习笔记——10信号——信号接口函数 signal 和 sigaction

    signal函数     signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制.在后来的分支中,部分系统使用原来的不可靠机制定义signal函数,如 Solaris 10 .而 ...

  3. APUE学习笔记——10 信号

    信号的基本概念     信号是软件中断,信号提供了解决异步时间的方法.     每一中信号都有一个名字,信号名以SIG开头. 产生信号的几种方式     很多条件可以产生信号:     终端交互:用户 ...

  4. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

    如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...

  5. APUE学习笔记——10.18 system函数 与waitpid

    system函数 system函数用方便在一个进程中执行命令行(一行shell命令). 用法如下: #include <stdio.h> #include <stdlib.h> ...

  6. APUE学习笔记——10.15 sigsetjmp和siglongjmp

    转载自:sigsetjmp使用方法 如侵犯您的权益,请联系:windeal12@qq.com sigsetjmp使用方法 分类: c/c++ linux2012-02-03 12:33 1252人阅读 ...

  7. 《C++ Primer Plus》学习笔记10

    <C++ Primer Plus>学习笔记10 <<<<<<<<<<<<<<<<<&l ...

  8. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  9. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

随机推荐

  1. 前端工程师在实现支付功能的时候能做些什么(V客学院技术分享)?

    现在最流行的两种支付微信支付和支付宝支付,在日常开发的过程中肯定离不开支付功能的开发,有很多人第一次接触时会有些措手不及. 一.业务逻辑 (电商平台为例子) 支付大部分用在电商平台,各种打赏,游戏充值 ...

  2. 设置小窗口Activity

    http://blog.csdn.net/xieyihua1994/article/details/52586270 我们知道Activity本身是没有界面的.所以activity类创建了一个窗口,开 ...

  3. [BZOJ4016]最短路径树问题

    Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最 ...

  4. POJ_1159 Palindrome (线性动态规划+滚动数组)

    题意是说,给定一个字符串,问至少还需要插入多少个字符才能使得该字符串成为回文字符串. 这道题一开始做的时候用了一个简单的动态规划,开了一个5000*5000的数组,用递归形式实现,代码如下: 其中d[ ...

  5. js 苹果手机 keyup 事件不生效的问题

    $(document).on('keyup','input[name="txtInp"]',function(){}) 改 $(document).on('input proper ...

  6. js 日期 处理 加减时分秒

    1.日期处理 var _d = new Date("2018/01/01 12:00:00"); _d = new Date(_d.valueOf() + 60 * 1000);/ ...

  7. 【链接】Eclipse的Debug调试技巧

    Eclipse的Debug调试技巧大全 https://mp.weixin.qq.com/s/bORg9YxJiby2WenYRrXY-w 使用Eclipse调试Java程序的10个技巧 https: ...

  8. Delphi编码转换

    1.Delphi 的 Utf-8 转换 - findumars - 博客园.html https://www.cnblogs.com/findumars/archive/2013/12/26/3492 ...

  9. vector的坑——C++primer练习6.33总结

    说来惭愧,一道简单的对vector递归的题目写了一个多小时,最后还是请教了大神才改出来. 首先贴上原代码: void return_vector(vector<int>::iterator ...

  10. vue削笔机

    // 1.vue 是异步更新dom // 2.vue修改多次状态,vue 只会渲染一次 // 3.vue变化侦查机制,每次状态的变化都会发出一个渲染信号. // 检查队列中是否存在,不存在将渲染操作添 ...