转载注明出处: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. .NET Core + EF 报nuget包不兼容

    错误信息如下: 严重性 代码 说明 项目 文件 行 禁止显示状态错误 NU1107 Microsoft.EntityFrameworkCore 中检测到版本冲突.直接安装/引用 Microsoft.E ...

  2. AVAudioSession(1):iOS Audio Session 概览

    本文转自:AVAudioSession(1):iOS Audio Session 概览 | www.samirchen.com 本文内容主要来源于 Audio Session Programming ...

  3. mysql备份脚本-mysqldump

    背景:全库备份 备份流程: 1.生成DB列表,将DB名字写入文件 2.定义备份函数,结果写入SQL文件 3.压缩文件,减少磁盘占用量 4.设置保留天数,定期删除n天之前的 5.通过for循环读取DB列 ...

  4. 20145321 《Java程序设计》第一周学习总结

    20145321 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 1.三大平台:Java SE.Java EE .Java ME 2.Java SE:由JVM.JRE.JDK ...

  5. 20145211 《网络渗透》MS08_067安全漏洞

    20145211 <网络渗透>MS08_067安全漏洞 一.实验原理 ms08_067是服务器服务中一个秘密报告的漏洞,于2008年被发现.攻击者利用靶机默认开放的SMB服务的445端口, ...

  6. linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解

    1.特权级         Intel x86架构的cpu一共有0-4四个特权级,0级最高,3级最低,ARM架构也有不同的特权级,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查.硬件已经提 ...

  7. 钓鱼WIFI搭建

      1.无线网卡 2.KaliLinux操作系统,这里就不用说了,必备的 3.isc-dhcp-server服务器.安装好KaliLinux后只需要apt-get update 然后apt-get i ...

  8. RDB

    在运行情况下, Redis 以数据结构的形式将数据维持在内存中, 为了让这些数据在 Redis 重启之后仍然可用, Redis 分别提供了 RDB 和 AOF 两种持久化模式. 在 Redis 运行时 ...

  9. Docker Mysql主主同步配置搭建Demo

    主主同步配置和主从配置很相似,仅需稍做修改就可以了,对主从配置有疑问可以查看 上一篇文章. 进行Docker操作前,先建立目录,我的路径是d:/docker/mysql,目录结构如下: --mysql ...

  10. 测试php语句执行时间

    $start = microtime(true); $elapsed = microtime(true) - $start; echo "That took $elapsed seconds ...