6. 函数kill和raise

  • kill函数用来将信号发送给进程或者进程组。
  • raise函数则是进程用来向本进程发送信号的。
#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
返回值说明:成功返回0;失败返回-1

调用

raise(signo);

相当于调用

kill(getpid(), signo);

函数kill的pid参数有以下四种不同的情况

序号 pid范围 说明
1 pid > 0 将信号发送给进程ID为pid的进程
2 pid == 0 将信号发送给与当前进程属于同一进程组的所有进程(进程组ID相同的进程),当然这里不包括系统进程和内核进程
3 pid < 0 将信号发送给进程组ID等于|pid|的所有进程。同样不包括系统进程和内核进程
4 pid == -1 将信号发送给具有权限的其他所有进程

​ 这里面有一个前提: 要么是超级用户,拥有所有的权限。要么是拥有相同进程ID的进程,否则无法发送信号给其他进程。

7. 函数alarm和pause

7.1 alarm()

​ 使用alarm函数用来设置一个定时器,在将来的某一时间该定时器会超时。当定时器超时时,产生SIGALRM信号。如果忽略或者不捕捉该信号,则执行默认的动作:终止当前进程

#include <signal.h>
unsigned int alarm(unsigned int seconds);
返回值说明: 0或者以前设置的闹钟时间剩余的秒数。

​ 参数seconds的值是产生SIGALRM信号需要经过的秒数。当定时时间到时由内核产生,但是由于进程调度的延时,时间上有一定的延时。

​ 每一个进程只允许有一个闹钟时间:

/*************************************************************************
> File Name: alarm.c
> Author: Toney Sun
> Mail: vip_13031075266@163.com
> Created Time: 2020年04月27日 星期一 17时35分42秒
************************************************************************/ #include <stdio.h>
#include <signal.h> void alarm_test(void)
{
int ret; ret=alarm(10);
printf("First alarm :ret = %d\n", ret); sleep(2); ret=alarm(2);
printf("Second alarm :ret = %d\n", ret);
}

验证结果如下:

toney@ubantu:/mnt/hgfs/em嵌入式学习记录/schedule调度器$ ./demo.out
First alarm :ret = 0
Second alarm :ret = 8
Alarm clock

​ 这会引入一个问题: 如果先前该进程已经注册了一个闹钟时间,但是还没有超时;如果重新设置定时器,先前剩余的时间会最为alarm()函数的返回值返回,与此同时,以前注册的闹钟时间被取代而不再生效。 如果有以前注册的尚未超时的闹钟时间,而且本地设置的seconds为0,则是取消该闹钟,剩余的时间仍然作为alarm函数的返回值。

7.2 pause()

​ pause函数使调用进程挂起,直至捕捉到某个信号。

#include <signal.h>
int pause(void);
返回值:-1, errno设置为EINTR

​ 只有执行了一个信号处理程序并从其返回,pause函数才会返回。它的返回值一直为-1,并设置相应的错误码。

异步处理方式之信号(三):kill、raise、alarm、pause函数简介的更多相关文章

  1. 异步处理方式之信号(一):基础知识和signal函数说明

    文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 3. 函数signal 3.1 signal函数 ...

  2. 三十一、Linux 进程与信号——SIGCHLD 信号、kill和raise函数以及alarm函数

    31.1 SIGCHLD 信号 子进程状态发生变化(子进程结束)产生该信号,父进程需要使用 wait 调用来等待子进程结束并回收它. 避免僵尸进程 #include <stdio.h> # ...

  3. UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数

    一.kill, raise, killpg 函数 int kill(pid_t pid, int sig); int raise(int sig); int killpg(int pgrp, int ...

  4. 系统编程-信号-信号发送kill、raise、alarm

    信号发送 kill 和 raise函数 kill函数参数详解: 实验1 raise和kill 的使用 #include <stdio.h> #include <signal.h> ...

  5. 线程池 异步I/O线程 <第三篇>

    在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...

  6. 异步加载js的三种方法

    js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...

  7. 转载 线程池 异步I/O线程 <第三篇>

    在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...

  8. js异步任务处理方式

    一.es6(es2015)之前:使用原始的callback函数,会陷入回掉地域 this.$http.jsonp('/login', (res) => { this.$http.jsonp('/ ...

  9. linux系统编程之信号(三)

    今天继续对信号进行研究,话不多说,言归正传: 更多信号发送函数: 上节中我们已经接触到了一些信号的发送函数,这里更进一步学习一下其它的发送函数: alarm:只能发送SIGALRM信号 下面通过一个例 ...

随机推荐

  1. Hadoop 3.1.1 - Yarn - 使用 GPU

    在 Yarn 上使用 GPU 前提 目前,Yarn 只支持 Nvidia GPU. YARN NodeManager 所在机器必须预先安装了 Nvidia 驱动器. 如果使用 Docker 作为容器的 ...

  2. 云服务器是什么?ECS、BCC、CVM...

    什么是云服务器?云服务器有哪些优势?能用来干什么? 很多人不太了解云服务器的定义和用途. 云服务器是一种简单高效.处理能力可弹性伸缩的计算服务,帮助用户快速构建更稳定.安全的应用,提升运维效率,降低 ...

  3. 杭电OJ 输入输出练习汇总

    主题 Calculate a + b 杭电OJ-1000 Input Each line will contain two integers A and B. Process to end of fi ...

  4. 自学vue第二天,从入门到放弃(生命周期的理解)

    生命周期的理解 beforeCreate 创建前 数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象 没有数据也没有方法 created 在创建后 数据和方法已经 data数据已经绑定好了 ...

  5. C++ //函数调用运算符重载 (仿函数)

    1 //函数调用运算符重载 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 //函 ...

  6. Java多线程操作同一个对象,线程不安全

    Java多线程操作同一个对象 发现问题:多个线程操作同一资源的情况下,线程不安全,数据紊乱 代码: package multithreading; // Java多线程操作同一个对象 // 买火车票的 ...

  7. MyBatis学习06(动态SQL和缓存)

    10.动态SQL 10.1 什么是动态SQL 动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官网描述: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或 ...

  8. 北航OO第四单元——UML图解析

    北航OO第四单元--UML图解析 作业要求简析 刚接触本次作业可能需要花上一会才能搞清楚到底是要我们写个啥,在这里简单说一下: UML图的保存格式.mdj文件是以json文件的形式存储的,将每一个Um ...

  9. 从安装到使用——Odoo常见问题及故障处理

    小九今天分享了Odoo一键部署.高效安装的图文详解,接下来,针对Odoo使用过程中的一些问题,小九整理了详细的常见问题问答.这样的直观方式往往能快速高效地解决一些疑惑. 也欢迎提出其他问题,共同探讨, ...

  10. bluecms安装错误一记

    菜鸡兴致勃勃下载了bluecms1.6准备大干一番 环境 phpstudy mysql 5.7.26 apache 2.4.39 php 7.3.4 结果安装第四步发现个这个问题   开始还以为自己这 ...