异步处理方式之信号(三):kill、raise、alarm、pause函数简介
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函数简介的更多相关文章
- 异步处理方式之信号(一):基础知识和signal函数说明
文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 3. 函数signal 3.1 signal函数 ...
- 三十一、Linux 进程与信号——SIGCHLD 信号、kill和raise函数以及alarm函数
31.1 SIGCHLD 信号 子进程状态发生变化(子进程结束)产生该信号,父进程需要使用 wait 调用来等待子进程结束并回收它. 避免僵尸进程 #include <stdio.h> # ...
- 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 ...
- 系统编程-信号-信号发送kill、raise、alarm
信号发送 kill 和 raise函数 kill函数参数详解: 实验1 raise和kill 的使用 #include <stdio.h> #include <signal.h> ...
- 线程池 异步I/O线程 <第三篇>
在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...
- 异步加载js的三种方法
js加载时间线 : 它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来. 1.创建Document对象,开始解析web页面.解析H ...
- 转载 线程池 异步I/O线程 <第三篇>
在学习异步之前先来说说异步的好处,例如对于不需要CPU参数的输入输出操作,可以将实际的处理步骤分为以下三步: 启动处理: 实际的处理,此时不需要CPU参数: 任务完成后的处理: 以上步骤如果仅仅使用一 ...
- js异步任务处理方式
一.es6(es2015)之前:使用原始的callback函数,会陷入回掉地域 this.$http.jsonp('/login', (res) => { this.$http.jsonp('/ ...
- linux系统编程之信号(三)
今天继续对信号进行研究,话不多说,言归正传: 更多信号发送函数: 上节中我们已经接触到了一些信号的发送函数,这里更进一步学习一下其它的发送函数: alarm:只能发送SIGALRM信号 下面通过一个例 ...
随机推荐
- Maven-内部多个项目依赖自动升级版本的部署
需要自动升级版本的AAA项目发布 (有内部依赖时) 步骤比较复杂, 有一些需要根据实际情况调整. 考虑了以下几种可能性: 依赖模块的版本有更新 依赖模块版本没更新 依赖模块的版本号: 直接定义, 用属 ...
- Android系统编程入门系列之加载服务Service
之前几篇文章简单梳理了在Android系统的四大组件之一,最主要的界面Activity中,使应用程序与用户进行交互响应的相关知识点,那对于应用程序中不需要与用户交互的逻辑,又要用到哪些内容呢?本文开始 ...
- selenium WebDriverWait
Selenium WebDriverWait的知识: 一.webdrivewait 示例代码 from selenium import webdriver from selenium.webdri ...
- 智能合约审计-不安全的delegatecall
简介 当合约A以delegatecall方式调用时, 相当于将外部合约B的func()代码复制过来 (其函数中涉及的变量或函数都需要在本地存在), 在合约A上下文空间中执行. 合约 pragma so ...
- ffuf 基础食用指南
PS: 1. 下文出现的某些字典 有可能是因为摆出效果 我自己瞎搞得字典 2. 分享一些好的工具 3. 其实Wfuzz也很好用的 4. 很早之前就在语雀写过Wfuzz和ffuf的笔记 但是一直没有公开 ...
- CentOS文件目录类语法
目录 一.目录查看切换类 1. pwd 显示当前工作目录的绝对路径 2. ls 列出目录的内容 二.文件与目录创建删除类 1. mkdir 创建一个新目录 2. touch 创建空文件 3. rmdi ...
- Manage Historical Snapshots in Sonarqube
Login as admin, go to a dashboard of a project, then click "Configuration -> History" a ...
- Linux 开机关机在线求助与指令输入
由于那本书版本稍稍有点早,我就跳过学习第二章第三章了(分别是主机规划和虚拟机安装)下图为在自己电脑上安装好的redhat7 4.1 我们来登入 其中第一行是Linux发行商和发行版本(欸,我的这个怎么 ...
- 更换Swing界面中的窗口图标
Swing 窗口图标更换 因为需要,所以要更改窗口的图标,很简单 在代码中加上 Image icon = Toolkit.getDefaultToolkit().getImage("图片地址 ...
- java基础技术集合面试【笔记】
java基础技术集合面试[笔记] Hashmap: 基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键(除了不同步和允许使用 null 之外,Ha ...