背景

学习 海思SDK,查看例程的时候发现了类似下面的代码:

int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Usage: mpeg <vedio source filename>\n");
exit(0);
}
signal(SIGINT, SAMPLE_VDEC_HandleSig);
signal(SIGTERM, SAMPLE_VDEC_HandleSig);
SAMPLE_VDEC_VdhMpeg4(argv[1]);
return 0;
}

了解了有关资料,恍然大悟。觉得这种规范很好,当是新的学习机会,应该记录下来。

知识

signal 函数

我们查看有关的原型。(当时了解 typedef 的时候也是拿这个函数举例的)

#include <signal.h>

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

这个函数的意义是:当收到 信号值为signum的信号时,执行handler函数。(注意,并非所有的信号值都可以这样处理)

1)SIGINT关联ctrl+c、只能结束前台进程

通过ctrl+c对当前进程发送结束信号,信号被进程树接收到(即:不仅当前进程,子进程也会收到结束信号)

2)SIGTERM可以被阻塞、处理和忽略;因此有的进程不能按预期的结束

kill不使用参数:发送SIGTERM信号,只有当前进程收到信号,若当前进程被kill,则子进程的父进程就会更改为init,即pid为1

kill命令的默认不带参数发生的信号就是SIGTERM,让程序友好退出 ,当程序未退出时,可以使用kill -9强制退出

设计思想

在程序启动的时候,注册了signal 函数,用来防止当进程意外退出时,能够及时进行有关资源的回收(尤其是在IPC中);以避免因为资源回收不当而导致的一些问题。

Linux进程退出:SIGINT、SIGTERM 和 SIGKILL 有关信号 区别的更多相关文章

  1. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...

  2. Linux 进程退出后自动启动

    /********************************************************************** * Linux 进程退出后自动启动 * 说明: * 在系 ...

  3. Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  4. 飞鸽传书linux进程退出不彻底

    问题描述: 飞鸽传书linux版本(QIpmsg)是有问题的. 在ubuntu14.04上运行的时候,没有任务栏图标,点击关闭也不能退出进程,端口仍然占用,无法再次运行. 这个问题截至1.2.1412 ...

  5. linux 进程通信之 信号

    一,管道PIPE 二,FIFO通信 三,mmap通信 四,信号的概念 信号的特点:简单,但不能携带大量的信息,满足特定条件就会发生 信号的机制:进程B发送信号给进程A.信号是由内核来处理的. 信号的产 ...

  6. Linux 进程后台运行的几种方式(screen)

    Ctrl+z/bg/nohup/setsid/& 在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了: ./rsy ...

  7. Linux进程管理:后台启动进程和任务管理命令

    一.为什么要使程序在后台执行 我们的应用有时候要运行时间很长,如:几个小时甚至几个星期,我们可以让程序在后台一直跑. 让程序在后台运行的好处有: 终端关机不影响后台进程的运行.(不会终端一关机或者网络 ...

  8. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

  9. 进程退出:SIGINT、SIGTERM和SIGKILL区别

    一.SIGINT.SIGTERM和SIGKILL区别 SIGINT与SIGTERM区别1)SIGINT关联ctrl+c2)SIGINT只能结束前台进程3)通过ctrl+c对当前进程发送结束信号,信号被 ...

  10. linux信号 SIGINT SIGTERM SIGKILL

    三者都是结束/终止进程运行. 1.SIGINT SIGTERM区别 前者与字符ctrl+c关联,后者没有任何控制字符关联. 前者只能结束前台进程,后者则不是. 2.SIGTERM SIGKILL的区别 ...

随机推荐

  1. 【简说Python WEB】Jinja2模板

    目录 [简说Python WEB]Jinja2模板 目前环境的代码树 抽离出来的Html模板 渲染模板 条件语句 循环语句 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境 ...

  2. 配置vscode的vue环境变量

    参考下面连接: vscode中使用beautify插件格式化vue文件(自定义快捷键) https://blog.csdn.net/jiandan1127/article/details/859589 ...

  3. laravel-cms学习笔记

    学习地址: https://www.houdunren.com/edu/video/12045 laravel 文档地址: https://gitee.com/houdunren/code/blob/ ...

  4. 4G EPS 中建立 UE 和 MME 之间的 NAS(非接入服务)信令连接

    目录 文章目录 目录 前文列表 建立 NAS(非接入服务)信令连接 前文列表 <4G EPS 中的小区搜索> <4G EPS 中的 PLMN 选择> <4G EPS 中的 ...

  5. mybatis-plus id在高并发下出现重复

    mybaits-plus ASSIGN_ID生成 id生成策略 在分布式高并发环境下出现重复id https://github.com/baomidou/mybatis-plus/issues/307 ...

  6. js与jquery实例-拖动改变列宽和行高

    js与jquery实例-拖动改变列宽和行高 如何通过javascript或者jquery实现改变表格宽度或者行高的功能?今天就把这个功能代码分享给大家,绝对原创哦,代码少而且易懂.先看效果图: htm ...

  7. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤)

    1. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤) @ 目录 1. Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤) 每博一文案 2. 大概的实现步骤概 ...

  8. datagridview 批量更新、日期设置、指定列弹出右键菜单

    需求是这样,只有调整日期,调整金额两列能被修改,其余的列都不能被修改.日期格式要防止用户输错.数字输入了中文也要提示. 数据来源于存储过程里的视图,这里需要注意的一点是:datagridview采用a ...

  9. 企业生产环境中的麒麟V10(ARM架构)操作系统部署jdk和redis三主三从交叉版集群

    前言:麒麟ARM操作系统是国企和政务机关推行信创化选择率比较高的一款操作系统,然而ARM操作系统非主流的X86系统,除了命令一样,在架构方面差别极大,初次接触多多少少会踩坑,下面我将在公司中部署的实例 ...

  10. itest(爱测试) 开源接口测试,敏捷测试管理平台10.2.3发布

    一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...