转载注明出处: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. 【转】安装Vue.js的方法

    安装vue.js的方法   一.简介 Vue.js 是什么 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量 ...

  2. wamp5.5.12安装re dis扩展

    转载地址:http://hanqunfeng.iteye.com/blog/1984387 phpredis是个人觉得最好的一个php-redis客户端,因为其提供的function与redis的命令 ...

  3. Nginx访问控制_IP访问控制(http_access_module)原理、局限性、解决方法讲解

    基于IP的访问控制,基于Nginx的http_access_module模块,是Nginx本身内置的模块,不需要安装的时候配置.也就是允许哪些IP访问,不允许哪些IP访问 server { liste ...

  4. 基于tomcat集群做session共享

    前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomc ...

  5. linux块设备读写流程

    在学习块设备原理的时候,我最关系块设备的数据流程,从应用程序调用Read或者Write开始,数据在内核中到底是如何流通.处理的呢?然后又如何抵达具体的物理设备的呢?下面对一个带Cache功能的块设备数 ...

  6. C++利用系统时间产生的随机数

    本文由青松原创并依GPL-V2及其后续版本发放,转载请注明出处且应包含本行声明. C++中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integra ...

  7. Base64编码原理

    Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32.Base16编码.标准Base64编码使用的64个字符为: 这64个字符是各种字符编码(比如AS ...

  8. ubuntu18.04 64bit如何安装docker

    注:参考自https://docs.docker.com/install/linux/docker-ce/ubuntu/ 1.卸载旧版本docker(如果之前安装了) sudo apt-get rem ...

  9. [BZOJ1576]安全路经Travel

    题目大意:从1号点出发,到每个点的最短路的最后一条边不能被访问,求此时1号点到其他点的最短路 建立最短路树,对于一条非树边,把它加进去会形成一个环和一条链,如图: 即红色和蓝色路径构成的图,它的长度为 ...

  10. IntelliJ IDEA 开发git多模块项目

    1.clone主项目 填写主仓库地址 2.在项目根目录,初始化子模块,并clone源码 git submodule init git submodule update 3.定位到各个子模块根目录,并切 ...