信号:

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进程管理—信号、定时器的更多相关文章

  1. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  2. 12个Linux进程管理命令介绍(转)

    12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国  作者:Linux [字体:大 中 小]   执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...

  3. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  4. Linux性能及调优指南(翻译)之Linux进程管理

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.1节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

  5. [转帖]十二 个经典 Linux 进程管理命令介绍

    https://www.cnblogs.com/swordxia/p/4550825.html 接了 http referer 头 没法显示图片 可以去原始blog 里面去查看.   随笔- 109  ...

  6. Linux进程管理 (1)进程的诞生

    专题:Linux进程管理专题 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 L ...

  7. Linux进程管理 (7)实时调度

    关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...

  8. Linux 进程管理 笔记

    https://www.ibm.com/developerworks/cn/linux/l-linux-process-management/index.htmlLinux 进程管理剖析 进程可以是短 ...

  9. 《Linux 性能及调优指南》1.1 Linux进程管理

    https://blog.csdn.net/ljianhui/article/details/46718835 本文为IBM RedBook的Linux Performanceand Tuning G ...

随机推荐

  1. 基于u-boot源码的简单shell软件实现

    一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与 ...

  2. windows2003网络负载平衡设置

    问题 随着计算机技术的不断发展,单台计算机的性能和可靠性越来越高.但现实中还是有许多应用是单台计算机难以达到,例如: 1.银行存储用户数据的数据库服务器必须保证24小时不间断的运转,并在发生严重硬件故 ...

  3. ipad在非viewport 1:1下缩放问题

    1.最小会有980宽度,小于980应设置viewport 2.fix元素使用100%指定宽度时,默认会以min-width或980作为尺寸,可以选择给定与页面缩放时触发定宽来设置宽度,或设置设置bod ...

  4. 递归-快速排序quickSort

    现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序.首先在这个序列中随便找一个数作为基准数.为了方便,就让第一个数6作为基准数吧.接下来,需要将这个序列中所有比基准数 ...

  5. PS字体工具字体显示不出来

    显示一个小点:搜索了各种答案,扩大字号(最大72)更改前景色和背景色,最正确的解释就是分辨率太低,我发现分辨率是1,一般的设置成300,1分辨率情况下可以在图层那选择文字图层,然后按ctrl+t,拉大 ...

  6. BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整

    Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...

  7. 机器学习的数学基础(1)--Dirichlet分布

    机器学习的数学基础(1)--Dirichlet分布 这一系列(机器学习的数学基础)主要包括目前学习过程中回过头复习的基础数学知识的总结. 基础知识:conjugate priors共轭先验 共轭先验是 ...

  8. VC模拟发送数据包-百度关键词查找

    VC模拟发送数据包-百度关键词查找 逗比汪星人2009-09-06上传   VC模拟发送数据包-百度关键词abcdef查找 详情 http://blog.csdn.net/wangningyu htt ...

  9. POJ_3280_Cheapest_Palindrome_(动态规划)

    描述 http://poj.org/problem?id=3280 n 种小写字母构成长度为 m 的串,现在要通过增删字母使串回文,给出每种字母增和删的费用,求最小花费. Cheapest Palin ...

  10. Java for selenium(webdriver) 环境搭建

    开发环境 1. jdk1.7 2. Eclipse 3. selenium(selenium-java-2.42.2.zip) 将下载下来的 selenium-java-2.42.2.zip 解压, ...