linux信号学习02

  1. 未决信号集与阻塞信号集(信号屏蔽字)
    阻塞信号集: 将某些信号加入集合,对他们设置屏蔽,当屏蔽x信号后,再收到该信号,该信号的处理将推后(解除屏蔽后)
    未决信号集:
    a. 信号产生,未决信号集中描述该信号的位立刻翻转为1,表信号处于未决状态。当信号被处理对应位翻转回为0。这一时刻往往非常短暂。
    b. 信号产生后由于某些原因(主要是阻塞)不能抵达。这类信号的集合称之为未决信号集。在屏蔽解除前,信号一直处于未决状态。
    相当于 阻塞信号集在未决信号集前面设置了一堵墙
    在这里插入图片描述

  2. 系统api产生信号
    kill函数

#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);

参数介绍:
pid >0,要发送的进程ID
pid =0,代表当前进程组内所有进程
pid =-1, 代表有权限发送的所有进程
pid <-1, 代表 -pid对应组内所有进程
sig 对应的信号

kill函数代码示例

de <sys/types.h>
#include <signal.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>int main() {int i=0;pid_t pid;for(; i<5; ++i) {pid = fork();if(pid==0){break;}}if(i=2) {printf("son---%d will kill fatherProgress\n",i);sleep(5);kill(getppid(), SIGKILL);while (1) {sleep(1);}} if(i=5) {while(1) {printf("father ----\n");sleep(1);}}return 0;
}

–分割线–
alarm
man alarm

 #include <unistd.h>unsigned int alarm(unsigned int seconds);

alarm() arranges for a SIGALRM signal to be delivered to the calling
process in seconds seconds.
If seconds is zero, any pending alarm is canceled.
In any event any previously set alarm() is canceled.
alarm() 函数 给调用者(自己)发送 一个 SIGALRM 信号,在 seconds秒后。
如果 seconds是0, 取消之前的 设置的 alarm。

return返回值
返回之前设置的 alarm剩余的秒数,如果之前没有设置alarm,就返回0.

alarm代码示例:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>int main() {int ret_1 = alarm(5);printf("%d\n", ret_1);sleep(2);int ret_2 = alarm(4);int num = 4;printf("%d\n", ret_2);while (1) {printf(" will ararm fater %d\n", num--);sleep(1);}return 0;
}

–分割线–
setitimer函数,周期性发送信号
man setitimer

#include <sys/time.h>
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);

参数介绍:
which 三种选择

真实时间ITIMER_REAL    decrements in real time, and delivers SIGALRM upon expi‐ration.计算进程执行时间ITIMER_VIRTUAL decrements  only  when  the  process  is  executing, anddelivers SIGVTALRM upon expiration.计算进程执行 + 调度时间
ITIMER_PROF    decrements both when the process executes and  when  thesystem  is  executing on behalf of the process.  Coupledwith ITIMER_VIRTUAL, this timer is usually used to  pro‐file  the time spent by the application in user and ker‐nel space.  SIGPROF is delivered upon expiration.
struct itimerval {struct timeval it_interval; /* Interval for periodic timer */  周期定时器间隔struct timeval it_value;    /* Time until next expiration */ 下次执行时间
};struct timeval {time_t      tv_sec;         /* seconds */ 秒数suseconds_t tv_usec;        /* microseconds */ 微秒数
};

new_value 要设置的闹钟时间
old_value 原闹钟时间

return: 成功返回0, 失败-1,并设置errno
setitimer 代码示例:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>void catch(int sign) {if(sign == SIGALRM) {printf("catch signal is %d\n", sign);}   
}
int main() {signal(SIGALRM, catch);struct itimerval new_value = {{3, 0},{1, 0}};setitimer(ITIMER_REAL, &new_value,  NULL);while (1){printf(" setitimer test\n");sleep(1);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程学习笔记《三》代码优化和性能测试

文章目录软件工程学习笔记目录如何在开源社区提问&#xff1f;代码审查代码优化运行结果参数解释代码优化原则对常见的数据结构排序算法进行测试关于冒泡排序优化的探讨结果软件工程学习笔记目录 [https://blog.csdn.net/csdn_kou/article/details/83754356] 如何在开源社区提…

linux信号捕捉

信号捕捉&#xff0c;防止进程意外死亡 signal函数 man signal #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);参数介绍&#xff1b; signum 要捕捉的信号 handler 要执行的捕捉函数指针&#xff0c…

软件工程学习笔记《四》需求分析

文章目录软件工程学习笔记《目录》需求工程师当代的需求工程师需要具备的能力当代的需求工程师需要努力的方向当代的需求工程师需要注意的错误需求的定义需求目标需求分析的实质需求分析的关键应该涵盖的内容&#xff1f;需求规约&#xff08;作为较客观的参照&#xff09;单个…

linux守护进程

先了解 linux系统中 会话的概念 会话是进程组的更高一级&#xff0c;多个进程组对应一个会话。 会话是一个或多个进程组的集合 创建一个会话需要注意以下5点事项&#xff1a; a. 调用进程不能是进程组组长&#xff0c; 该进程变成新会话首进程&#xff08;session header&#…

linux 线程学习初步01

线程的概念 进程与线程内核实现 通过函数clone实现的 ps -Lf pidLinux内核线程实现原理 同一个进程下的线程&#xff0c;共享该进程的内存区&#xff0c; 但是只有stack区域不共享。 线程共享资源 a.文件描述符表 b.每种信号的处理方式 c.当前工作目录 d.用户id和组id 线程…

python的文件基本操作和文件指针

读写模式的基本操作 https://www.cnblogs.com/c-x-m/articles/7756498.html r,w,a r只读模式【默认模式&#xff0c;文件必须存在&#xff0c;不存在则抛出异常】w只写模式【不可读&#xff1b;不存在则创建&#xff1b;存在则清空内容】a之追加写模式【不可读&#xff1b;不…

HTTP菜鸟教程速查手册

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是因特网上应用最为广泛的一种网络传输协议&#xff0c;所有的WWW文件都必须遵守这个标准。 HTTP是一个基于TCP/IP通信协议来传递数据&#xff08;HTML 文件, 图片文件, 查询结果等&am…

mysql学习笔记01-创建数据库

创建数据库&#xff1a; 校验规则&#xff1a;是指表的排序规则和查询时候的规则 utf8_general_ci 支持中文&#xff0c; 且不区分大小写 utf8_bin 支持中文&#xff0c; 区分大小写 比如&#xff1a; create database db3 character set utf8 collate utf8_general_ci; &…

python的Web编程

首先看一下效果 完整代码 import socket from multiprocessing import ProcessHTML_ROOT_DIR ""def handle_client(client_socket):request_data client_socket.recv(1024)print("request data:", request_data)response_start_line "HTTP/1.0 20…

mysql 学习笔记 02创建表

表结构的创建 比如&#xff1a; create table userinfo (id int unsigned comment id号name varchar(60) comment 用户名password char(32),birthday date ) character set utf8 engine MyISAM;comment 表示注释的意思 不同的存储引擎&#xff0c;创建的表的文件不一样

mysql 学习笔记03 常用数据类型

数值类型&#xff1a; a. 整数类型&#xff1a; 注意事项&#xff1a; 举例&#xff1a;某个整型字段 &#xff0c;不为空&#xff0c;且有默认值 create table test (age int unisigned not null default 1);zerofill的使用 b. bit类型的使用 c.小数类型 小数类型占用…

VMware的虚拟机连不上网

1.如果你发现在VMware下运行的虚拟机无法连接网络&#xff0c;那下面的方法也许可以帮 到你。&#xff08;前提是你的物理网络是通的&#xff09; 第一步&#xff1a;在VMware界面下 单击“编辑“→”虚拟网络编辑器” 第二步&#xff1a;单击”更改设置” 获取权限&#xff…

python三国演义人物出场统计

完整代码 开源代码 统计三国演义人物高频次数 #!/usr/bin/env python # codingutf-8 #e10.4CalThreeKingdoms.py import jieba excludes {"来到","人马","领兵","将军","却说","荆州","二人","…

mysql 学习笔记03修改表以及其他操作

首先创建一张表 在现有表的结构上增加字段 alter table users add image varchar(100) not null defalut comment 图片路径;修改某个字段的长度 alter table users modify job vachar(60) not null comment 工作;删除某个字段 删除sex这个字段 alter table users drop se…

mysql 学习笔记04 insert与update语句

1.插入数据 注意事项&#xff1a; 字符和日期类型&#xff0c; 要用 单引号 括起来 insert into (), (), () 例如&#xff1a; insert into goods values(1, abc, 2.2), (2, def, 3.3);这种形式添加多条记录 insert 语句&#xff0c;如果没有指定字段名&#xff0c;则values …

PyCharm怎么关闭端口,解决端口占用问题

在进行web开发遇到这个问题&#xff01;

mysql 笔记05 select语句以及条件语句的使用

select语句 过滤重复语句&#xff08;distinct&#xff09; 举例&#xff1a; 查询学生的总分 select name, math English China as 总分 from students;在姓赵的学生总分基础上&#xff0c; 增加60%&#xff0c; select name, round((math English China) * 1.6, 2) as …

mysql 学习笔记05 统计函数的相关使用

合计函数count&#xff0c; 统计多少条记录 统计共有多少学生 select count(*) from students;查询数学成绩大于等于90的学生数量 select count(*) from students where math > 90;查询总分超过235分的学生的数量 select count(*) from students where (English math Ch…

mysql学习笔记06分组语句的使用

group by 子句 对列进行分组 有两张表&#xff1a; 一张为部门表&#xff0c; 一张为员工表统计 每个部门的平均工资&#xff0c;与最高工资 select avg(salary), max(salary) from emp group by deptno;统计 每个部门的每个岗位的 平均工资与最低工资&#xff08;注意这里的…