Linux进程管理—信号、定时器
信号:
1. 信号的作用:
背景:
进程之间通信比较麻烦。
但进程之间又必须通信,比如父子进程之间。
作用:
通知其他进程响应。进程之间的一种通信机制。
信号:
接受信号的进程马上停止,调用信号处理函数。
信号处理函数:
默认处理函数
打印信号信息,退出进程。
用户处理函数。
中断:接受信号的进程马上停止,有信号发生时,处理信号,进程中断,信号处理结束,返回进程继续执行。
软中断
案例:
1.进程之中,默认信号处理
2.进程之中,用户信号处理
3.中断
命令:
kill –s 信号 进程ID
信号:数字1-31 34-64
宏SIGINT=2
ctrl+d 发送信号2 SIGINT(中断信号)
kill -l察看所有信号
信号SIGKILLSIGSTOP不能被处理.(只能调用默认处理函数)
信号的注册,信号与函数绑定(用户处理函数)
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
voidhandle()
{
printf(“信号发生!\n”);
}
voidmain()
{
signal(SIGINGT , handle);
while(1)
{
printf(“进程执行中\n”);
sleep(1);
}
}
向该进程发送SIGINT(中断信号),进程调用函数handle
说明:
如果信号没有绑定函数,向进程发送了信号,则进程调用默认处理函数:打印信号信息,进程退出。
如果信号绑定了函数,向进程发送相应的信号,则进程调用用户处理函数。
使用程序发生信号:
发送信号
int kill(pid_t pid,int s);
第一个参数:pid:进程ID,向该进程发送信号。
第二个参数:s:信号,发送的信号
进程ID的要求:
>0:发送信号到指定进程
=0:发送信号到该进程所在进程组的所有进程
-1:发送给所有进程,除init外
<0:发送给指定的进程组(组ID=绝对值)
例子:
Signal.c
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
voidhandle()
{
printf(“信号发生!\n”);
}
voidmain()
{
signal(SIGINGT , handle);
while(1)
{
printf(“进程执行中%d\n,getpid()”);
sleep(1);
}
}
Kill.c
#include<stdio.h>
#include<signal.h>
void main()
{
while(1)
{
kill(3828,SIGINT);
sleep(2);
}
}
信号的应用:
1. 延时器timeout
延长器信号:SIGALRM
信号发出函数:alarm
#include<unistd.h>
unsigned int alarm(unsigned int seconds);
在指定的时间发送信号 ,指向本进程发送该信号,只发送一次。
例子:
#include<stdio.h>
#include<signal.h>
voiddeal()
{
printf(“起床了!”);
}
void main()
{
signal(SIGALRM , deal);
alarm(5); //5秒钟后,发送信号
while(1)
{
//进程处理
}
}
2. 定时器
int setitimer(int which,//计时方式
//ITIMER_REAL真实事件(时钟时间) / ITIMER_VIRTUAL 进程时间(进程运行时间) /ITIMER_PROF混合时间
const struct itimerval *val,//定时器的时间参数
struct itimerval *oldval);//返回原来设置的定时器
//如果=NULL,则不返回
struct itimerval
{
struct timevalit_interval;//间隔时间
structtimeval it_value;//延时时间
}
structtimeval
{
long tv_sec; //秒
long tv_usec;//微秒
}
例子:
#include<stdio.h>
#include<signal.h>
#include<sys/time.h>
voiddeal()
{
printf(“起床了!\n”);
}
voidmain()
{
itimerval val;
Signal(SIGALRM,deal);
//描述定时器
val.it_interval.tv_sec=3; //间隔时间设置为3秒,则程序启动后,3秒钟会触发时器,发送信号SIGALRM
val.it_value.tv_sec=1; //触发定时器后,每1秒钟触发一次定时器
setitimer(ITIMER_REAL,&val,0); //设置定时器
//如果想程序一启动就触发定时器
//val.it_interval.tv_sec=0;
//val.it_interval.tv_usec=1; 毫秒设置为1秒,不能把秒和毫秒都设置为0,会使程序无法触发定时器的
while(1)
{
printf(“进程执行中!\n”);
}
}
Linux进程管理—信号、定时器的更多相关文章
- Linux进程管理子系统分析【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...
- 12个Linux进程管理命令介绍(转)
12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国 作者:Linux [字体:大 中 小] 执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...
- Linux进程管理知识整理
Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...
- Linux性能及调优指南(翻译)之Linux进程管理
本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...
- [转帖]十二 个经典 Linux 进程管理命令介绍
https://www.cnblogs.com/swordxia/p/4550825.html 接了 http referer 头 没法显示图片 可以去原始blog 里面去查看. 随笔- 109 ...
- Linux进程管理 (1)进程的诞生
专题:Linux进程管理专题 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 L ...
- Linux进程管理 (7)实时调度
关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...
- Linux 进程管理 笔记
https://www.ibm.com/developerworks/cn/linux/l-linux-process-management/index.htmlLinux 进程管理剖析 进程可以是短 ...
- 《Linux 性能及调优指南》1.1 Linux进程管理
https://blog.csdn.net/ljianhui/article/details/46718835 本文为IBM RedBook的Linux Performanceand Tuning G ...
随机推荐
- cocos2d-x笔记2: 编译到安卓的步骤与注意事项
博客地址: www.cnblogs.com/wolfred7464/ 不得不说,真心复杂,本篇博客总结的基本是最简最直接的步骤了,不用Cygwin和Ant的,当然用也可以... 以下用 %PROJEC ...
- U盘装系统出现错误 安装失败怎么办
在用U盘装系统的时候,有些用户犹豫第一次操作,经常会遇到一些问题.例如U盘装系统失败;U盘容量已用完;内存损坏等种种问题.因此小编整理了一些关于U盘装系统失败的常见问题解答,希望对大家有帮助! 1. ...
- Response.Redirect:无法在发送 HTTP 标头之后进行重定向
URL:http://blog.163.com/asp_neter/blog/static/17510918820107258107558/ 错误出现语句:“Response.Redirect(&qu ...
- 基于Delphi的Socket I/O模型全接触 good
老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系.他们的信会被邮递员投递到他们的信箱里. 这和Socket模型非常类似.下面我就以老陈接收信件为例讲解Socket I/O模型. 一:se ...
- VS2013 ASP.NET MVC 修改Web项目的IISExpress的端口固定
[首先]关闭防火墙,或防火墙开放端口 在解决方案中,右键某项目,属性——Web——服务器——选择IISExpress URL输入:http://localhost:8000/ 直接将8000更改 ...
- 【HDOJ】4183 Pahom on Water
就是一个网络流.red结点容量为2,查看最大流量是否大于等于2.对于条件2,把边反向加入建图.条件1,边正向加入建图. /* 4183 */ #include <iostream> #in ...
- 【CF】3B Lorry
这道题目网上有几个题解,均有问题.其实就是简单的贪心+排序,没必要做的那么复杂.一旦tot+curv > v时,显然curv==2, 有三种可能:(1)取出最小的curv==1的pp,装入当前的 ...
- Oracle core02_数据块
数据更改 oracle core完成了oracle的核心功能,recovery,读一致性等. 深入的了解oracle的机制,就从一个最简单的更新开始.对于oracle来说,最大的一个特性就是写了两次数 ...
- 利用if else 求房贷
static void Main(string[] args) { while (true) //主要就是公式的运用和if else 的嵌套 ...
- App架构经验总结(转)
原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构 ...