UNIX C 信号
1.信号处理
#include <signal.h> typedef void(*sighander_t)(int); sighander_t signal(int signum,sighander_t hander)
成功返回原信号处理方式,失败返回SIGERR --signum :信号编号
--hander: 信号处理方式
SIG_IGN:忽略信号
SIG_DFL:默认操作
信号处理函数指针 -捕获信号
2.信号处理函数
void sighander(int signum)
{
信号处理代码;
}
3.调用函数发送信号
杀死进程信号
#include <signal.h> int kill (pid_t pid,int signum); 成功发送信号并返回0,失败-
向调用进程发送信号
#include <signal.h> int raise(int signum); raise函数是向调用进程发送信号
对单线程程序来说,相当于
kill(getpid,signum);
对多线程程序来说,相当于
pthread_kill(pthread_self,signum);
4.暂停
#include <unistd.h> int pause(void);
该函数无时限睡眠,只到收到信号发生,改变自身状态
成功阻塞,失败-;
5.睡眠
sleep(seconds)
#include <unistd.h> unsigned int sleep(unsigned int seconds); 返回0或剩余秒数 该函数调用进(线)程睡眠seconds秒,除非信号打破这种状态
usleep
#include <unistd.h> int usleep(usecond_t usec); --usec 微秒
成功返回0,失败 -
6.闹钟
alarm
#include <unistd.h> unsigned int alarm(unsigned int seconds); 返回剩余秒数
7.信号集
填满信号集
#include <signal.h> int sigfillset(sigset_t* sigset); --sigset :信号集
清空信号集
#include <signal.h> int sigemptyset(sigset_t* sigset); 成功0,失败-
加入信号
#include <signal.h> int sigaddset(sigset_t* sigset,int signum); 成功0,失败- --sigset :信号集
--signum:信号编号
删除信号
#include <signal.h> int sigdelete(sigset_t* sigset,int signum); 成功0,失败-
判断信号是否在信号集中
#include <signal.h> sigismember(const sigset_t* sigset,int signum); 有返回1,没有0,失败-
8.信号屏蔽
信号掩码
#include <signal.h> int sigprocmask(int how,const sigest_t* sigset,sigset_t* oldsigset); --how有一下取值
SIG_BLOCK 将sigset信号加入当前信号掩码
SIG_UNBLOCK 从当前信号掩码中删除sigset信号
SIG_SETMASK sigset设置当前信号掩码
获取调用进程的未决信号
#include <signal.h> int sigpending(sigset_t* sigset); 成功返回0,失败返回- 输出未决信号集 sigset
9.定时器
#include <sys/time.h> int setitimer(int which,
const struct itimerval* new_value,
struct itimercal* old value); 成功返回0,失败返回- --which有下面取值
ITIMER_REAL 真实定时器
ITIMER_VIRTUAL 虚拟定时器
ITIMER_PROF 实用定时器 struct itimerval{
//重复间隔,取0发送一个信号后,停止
struct timerval it_interval;
//初始间隔,取0立即停止计时器
struct timerval it_value;
}; struct timerval{
long tv_sec;
long tv_usec;
};
10.管道
mkfifo myfifo //创建有名管道
#include <sys/stat.h> int mkfifo(const char* pathname,
mode_t mode); --pathname :文件路径
--mode:权限模式
无名管道-- 用于父子进程通信
#include <unistd.h> int pipe(int pipefd[]); 成功0,失败- pipefd:输出两个文件描述符 pipefd[]: 无名管道读取数据端
pipefd[]:无名管道写入数据端
UNIX C 信号的更多相关文章
- Linux/UNIX之信号(1)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/walkerkalr/article/details/24462723 信号(1) 信号是软件中断.每 ...
- Linux/UNIX之信号(2)
信号(2) sigaction函数 sigaction函数的功能是检查或改动与制定信号相关联的处理动作.此函数代替了signal函数. #include <signal.h> int si ...
- UNIX环境高级编程--10. 信号
第十章 信号 信号是软中断,提供了一种处理异步事件的方法.例如,终端用户键入终端键,会通过信号机制停止一个进程,或及早终止管道中的下一个程序. 每个信号都有一个名字,SIG开 ...
- UNIX环境高级编程——可靠信号与不可靠信号
在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点. 现在Linux 在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不 ...
- Unix环境高级编程(九)信号
信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法.每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号). ...
- Unix/Linux进程间通信(一):概述
序 Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进 ...
- 信号之signal函数
UNIX系统的信号机制最简单的接口是signal函数.signal函数的功能:为指定的信号安装一个新的信号处理函数. #include <signal.h> void (*signal(i ...
- Linux环境进程间通信(二):信号(下)
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- Linux环境进程间通信(二): 信号(上)
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- A*(也叫A star, A星)寻路算法Java版
寻路算法有非常多种,A*寻路算法被公觉得最好的寻路算法. 首先要理解什么是A*寻路算法,能够參考这三篇文章: http://www.gamedev.net/page/resources/_/techn ...
- jquery.validate.js插件的使用方法
近期做项目.须要用到 jQuery.validate.js插件,于是记录一下工作中的一些经验,以便日后学习. [样例例如以下] 1.前台页面 <form id="form1" ...
- Linux文件监控
关键词:linux, 监控 假设要让server保持最佳性能,你应该将 Linux server的执行级别 runlevel 设置为 3 .就是控制台模式.当你须要图形化桌面的时候使用 startx ...
- 使用Django框架实现游戏站点搭建
完整project链接点击打开链接 上一篇中我们使用了Javascript和Html5实现了弹球游戏.而在本文中我们希望以其为基础实现游戏站点,可以实现用户的注冊登录.游戏成绩记录,排名显示.微博分享 ...
- (OK) Installing Quagga—zebra—configure—make—CentOS7
-------------------Installing Quagga # tar xzf quagga-0.99.21mr2.2.tar.gz # cd quagga-0.99.21mr2.2 / ...
- P2932 [USACO09JAN]地震造成的破坏Earthquake Damage 爆搜
这题怎么这么水~~~本来以为挺难的一道题,结果随便一写就过了...本来还不知道损坏的牛棚算不算,结果不明不白就过了... 题干: 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有 ...
- PCB Genesis加二维码 实现方式
使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法, 使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可. 一.incam增加二维 ...
- bzoj 2152 聪聪可可(点分治模板)
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 3194 Solved: 1647[Submit][Status][Discuss ...
- cocos creator制作微信小游戏
2019-05-30 22:11:47 基础: javaScript基础 https://www.bilibili.com/video/av34087791?from=search&sei ...
- 【BZOJ4590】自动刷题机
[思路分析] 比赛的时候想到了用二分+贪心,二分的部分与贪心的部分也写对了,但是由于数据范围未看没有开long long,且二分左端点赋值过小导致WA掉 正解:二分+贪心 二分代码的长度,贪心判断能否 ...