apue 第10章 信号signal
每种信号都有名字,都是以SIG开头
信号机制最简单的接口是signal函数
#include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);
返回值:成功以前的信号处理配置,出错SIG_ERR
kill函数将信号发送给进程或进程组。raise函数则允许进程向自身发送信号
#include <sys/types.h>
#include <signal.h> int kill(pid_t pid, int sig); int raise(int sig);
返回值:成功0,出错-
使用alarm可以设置一个定时器,在将来的某个时刻该定时器会超时
#include <unistd.h> unsigned int alarm(unsigned int seconds);
返回值:0或以前设置的闹钟时间的余留秒数
pause函数使调用进程挂起直至捕捉到一个信号
#include <unistd.h> int pause(void);
返回值:-,errno设置EINTR
我们需要一个能表示多个信号的-----信号集
#include <signal.h> int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signum);
int sigdelset(sigset_t *set, int signum);
返回值:成功0,出错-
int sigismember(const sigset_t *set, int signum);
返回值:真返回1,假0
检测或更改,或同时进行检测和更改进程的信号屏蔽字
#include <signal.h> int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
返回值:成功0,出错-
返回一信号集,该信号通过set参数返回
#include <signal.h> int sigpending(sigset_t *set);
返回值:成功0,出错-
功能是检查或修改与指定信号相关联的处理动作。
#include <signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
返回值:成功0,出错-
非局部转移函数
#include <setjmp.h> int setjmp(jmp_buf env); int sigsetjmp(sigjmp_buf env, int savesigs);
返回值:直接调用0,若从siglongjmp调用返回,则为非0
void longjmp(jmp_buf env, int val0;
void siglongjmp(sigjmp_buf env, int val);
在运行pause中,信号可能会丢失。为了纠正问题,需要在院子操作中先恢复信号屏蔽字,然后休眠。
#include <signal.h> int sigsuspend(const sigset_t *mask);
返回值:-1,并将errno设置为EINTR
终止异常的工作
#include <stdio.h> void abort(void);
返回值:不返回
睡眠函数,但是都有缺陷
#include <unistd.h> unsigned int sleep(unsigned int seconds);
返回值:0或未休眠完的秒数
nanosleep函数与sleep函数类似,提供了纳秒级精度
#include <time.h> int nanosleep(const struct timespec *req, struct timespec *rem);
返回值:休眠到要求的时间,返回0,出错-
需要使用相对于特定时钟的延迟时间来挂起调用线程。
#include <time.h> int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *request, struct timespec *remain);
返回值:休眠要求的时间,返回0,出错返回错误码
使用sigqueue函数发送信号
#include <signal.h> int sigqueue(pid_t pid, int sig, const union sigval value);
返回值:成功0,出错-
可以使用psinal函数可移植的打印与信号编号对应的字符串
#include <signal.h> void psignal(int sig, const char *s0;
void psiginfo(const siginfo_t *pinfo, const char *s);
如果只需要信号的描述部分,与不需要把它写到标准错误文件中
#include <string.h> char *strsignal(int sig);
返回值:指向描述该信号的字符串的指针
apue 第10章 信号signal的更多相关文章
- UNIX环境高级编程 第10章 信号
SIGSTOP和SIGKILL区别是:前者是使进程暂时停止,即中止,也就是说使进程暂停,将进程挂起,比如你在终端里面执行一个脚本或者程序,执行到一半,你想暂停一下,你按下ctrl+z,就会导致终端发送 ...
- 《Unix环境高级编程》读书笔记 第10章-信号
1.引言 信号是软件中断. 信号提供了一种处理异步事件的方法. 2. 信号概念 信号的名字都是以3个字符SIG开头. Linux3.2.0支持31种信号.FreeBSD.Linux和Solaris作为 ...
- 【APUE | 10】函数signal
函数signal 函数signal介绍 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- apue第七章学习总结
apue第七章学习总结 1.main函数 程序是如何执行有关的c程序的? C程序总是从main函数开始执行.main函数的原型是 int main(int argc,char *argv[]); 其中 ...
- Linux进程间通信(一): 信号 signal()、sigaction()
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- 第10章 系统级I/O
第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...
- apue第四章学习总结
apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...
- Linux就这个范儿 第10章 生死与共的兄弟
Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...
随机推荐
- ECS运维:操作系统有异常?诊断日志来帮忙!
云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新.阿里云使用严格的IDC标准.服务器准入标准 ...
- Vue的跨域设置
1.在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的. 2.当跨域无法请求的时候我们可以修改工程下config文件夹下的index.js中的dev:{} ...
- BUUCTF | CODE REVIEW 1 (反序列化,md5绕过)
<?php /** * Created by PhpStorm. * User: jinzhao * Date: 2019/10/6 * Time: 8:04 PM */ highlight_f ...
- 【靶场练习_sqli-labs】SQLi-LABS Page-1(Basic Challenges)
GET篇 Less-1: 1.用order by得出待查表里有三个字段 http://192.168.40.165/sqli-labs-master/Less-1/?id=1' order by 3 ...
- HTML 3-列表、表单、语义化
有序列表.无序列表.自定义列表在语义上的区别 1.有序列表ol>li:列表有顺序编号(默认列表前加1.,2.,3.,...编号),适用于有逻辑顺序的排列项目,而且次序不能乱.2.无序列表ul&g ...
- php理解非对称SSL加密解密、验证及签名
加密方式分为对称加密和非对称加密,对称加密只使用一个秘钥,加密和解密都使用该秘钥:非对称加密则使用一对秘钥,使用公钥加密,私钥解密. 需要通过原生的openssl_public_encrypt加密,o ...
- Oracle 表空间、用户
一.表空间 临时表空间 创建临时表空间范例 CREATE TEMPORARY TABLESPACE duke_temp /* 临时表空间名称:duke_temp */ tempfile 'C:\ora ...
- Chrome-逆向分析JS-1分析google网站翻译器原文存放位置
剧透:就是使用了一下 Chrome DevTools 的 Memory 功能,通过已知的 JS 变量的值查找 JS 内存中变量的引用 # 一:不分析一下现有的网页翻译方法么? 总所周知,(As is ...
- maven 国内加速,修改镜像源
为什么慢 由于默认情况下执行 mvn 各种命令是去国外的 mvn 官方镜像源获取需要安装的具体软件信息,所以在不使用代理.不翻墙的情况下,从国内访问国外服务器的速度相对比较慢 如何修改镜像源 阿里旗下 ...
- nginx相关总结
1. Nginx 无法启动解决方法 在查看到 logs 中报了如下错误时: 0.0.0.0:80 failed (10013: An attempt was made to access a sock ...