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 信号的更多相关文章

  1. Linux/UNIX之信号(1)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/walkerkalr/article/details/24462723 信号(1) 信号是软件中断.每 ...

  2. Linux/UNIX之信号(2)

    信号(2) sigaction函数 sigaction函数的功能是检查或改动与制定信号相关联的处理动作.此函数代替了signal函数. #include <signal.h> int si ...

  3. UNIX环境高级编程--10. 信号

    第十章        信号    信号是软中断,提供了一种处理异步事件的方法.例如,终端用户键入终端键,会通过信号机制停止一个进程,或及早终止管道中的下一个程序.    每个信号都有一个名字,SIG开 ...

  4. UNIX环境高级编程——可靠信号与不可靠信号

    在早期的UNIX中信号是不可靠的,不可靠在这里指的是:信号可能丢失,一个信号发生了,但进程却可能一直不知道这一点. 现在Linux 在SIGRTMIN实时信号之前的都叫不可靠信号,这里的不可靠主要是不 ...

  5. Unix环境高级编程(九)信号

    信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法.每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号). ...

  6. Unix/Linux进程间通信(一):概述

    序 Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进 ...

  7. 信号之signal函数

    UNIX系统的信号机制最简单的接口是signal函数.signal函数的功能:为指定的信号安装一个新的信号处理函数. #include <signal.h> void (*signal(i ...

  8. Linux环境进程间通信(二):信号(下)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  9. Linux环境进程间通信(二): 信号(上)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

随机推荐

  1. mysql无密码重启

    mysql无密码重启 /etc/init.d/mysql stopnohup /usr/bin/mysqld_safe --user=mysql --skip-grant-tables &

  2. UpMarqueeTextView-模仿淘宝client向上滚动的广告条

    UpMarqueeTextView一个简单的向上滚动的相似跑马灯效果,项目中用到的时候是接受到推送过来的消息向上滚动一次.没有做动态的gif效果,所以都是一些纯文字的简单记录. UpMarqueeTe ...

  3. 曼哈顿距离MST

    https://www.cnblogs.com/xzxl/p/7237246.html 讲的不错 /* 曼哈顿距离最小生成树 poj 3241 Object Clustering 按照上面的假设我们先 ...

  4. Android TextView 设置行间距

    Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacin ...

  5. [JSOI2016]独特的树叶

    https://zybuluo.com/ysner/note/1177340 题面 有一颗大小为\(n\)的树\(A\),现加上一个节点并打乱编号,形成树\(B\),询问加上的节点最后编号是多少? \ ...

  6. IPv6系列-初学者的10个常见困扰

    本文是<IPv6系列>文章的第二篇<常见困扰>,紧接<入门指南>,用于解答IPv6的10个常见困扰. 小慢哥的原创文章,欢迎转载 目录 ▪ 本文缘由 ▪ 困扰1. ...

  7. Django day08 多表操作 (三) 基于对象的跨表查询 基于双下划线的多表查询

    一: 基于对象的跨表查询 1. 一对一 正向: 反向: 2. 一对多 正向: 反向: 3.多对多 正向: 反向: 4.*****基于对象的多表查询 二: 基于双下划线的多表查询 1. 连表查询 一对一 ...

  8. C# 设置百分比保留2位数

    double a=50; double b=100; 没有小数部分Label1.Text = (a   /   (a+b)).ToString("0%")   两位小数Label2 ...

  9. thinkphp 上传多张图片

    tp3.23 没有找到同时上传多张图片 手册有讲过:http://www.kancloud.cn/manual/thinkphp/1876 其实可以通过,多张图片多次上传来到达效果 hmlt: < ...

  10. X - Vasya and Socks

    Problem description Vasya has n pairs of socks. In the morning of each day Vasya has to put on a pai ...