之前看信号的时候,没有太注意不同信号的对比.今天再次看到的时候,突然感觉对一些信号,非常相似,乃至非常容易混淆.今天周末就抽空总结一下.

一、关闭进程信号

常见的4中关闭进程信号是SIGKILL,SIGINT,SIGTERM,SIGQUIT.SIGKILL,就是为了关闭进程用的,无法捕获以及忽略.场景是,管理员把一些占用资源的进程或者无法掌控的孤儿进程杀死.

SIGINT,interrupt(中断)进程,这个是可以捕获以及忽略。可以使用ctrl+c发出信号,直接发给父进程以及子进程,这样的话就可以把这个程序所有的进程都可以关闭掉。

SIGTERM,terminate(终止)进程,这个也是可以捕获以及忽略的。和SIGINT相比,就是没有相应的键盘控制命令。如果要去关闭所有的进程的话,只能挨个的发给所有的进程。

SIGQUIT,quit(退出)进程,这个也是可以捕获以及忽略的。可以使用ctrl+\发出信号,直接发给父进程以及子进程。如果是不捕获的话,他就会产生core文件。

键盘快捷键最大的好处就是发给所有的进程。

最下面我们用程序来验证一下。

第一组 关闭进程信号 程序验证

先上代码。

#include

#include

#include

#include

void process(int signo){

printf("signo:%d,pid:%d\n",signo,getpid());

}

void cleanup(){

printf("cleanup,pid:%d\n",getpid());

}

int main()

{

pid_t pid;

atexit(cleanup);

signal(SIGINT, process);

signal(SIGTERM, process);

//signal(SIGQUIT, process);

if( (pid = fork()) == 0 )

{

printf("child pid:%d\n",getpid());

while(1){

sleep(1);

}

}else{

printf("parent pid:%d\n",getpid());

while(1){

sleep(1);

}

}

return 0;

}

SIGKILL比较简单,我们就不再验证了。先验证一下SIGINT。

可以看到输入ctrl+c的时候,父子进程都收到相关的信号。但是我输入kill -2 742的时候,只有父进程收到了,不会传给子进程。

下面我们验证SIGQUIT产生core。

可能部分的机器默认是不产生,我们需要输入几个命令。

#设置core文件大小,这里是无限制

ulimit -c unlimited

#core后面跟着pid

sudo sysctl kernel.core_uses_pid=1

#core文件存放路径,放在当前的文件夹下

sudo sysctl kernal.core_pattern=core

二、停止信号

这组信号对比,相对上一组就简单多了.

SIGSTOP,程序挂起,没有相应的快捷键,不能被捕获以及忽略。

SIGTSTP,程序挂起,快捷键ctrl+z,可以被捕获以及忽略。

如果挂起之后,怎么再次让他们启动呢。简单一点,我们可以输入jobs,然后看一下他们的索引值。然后fg启动他们。

我们也可以给他们发送SIGCONT信号,让他们启动起来。不过这个时候,他们的只能在后台运行了。

这个时候,就可以看到他们的状态从T变成了S,从停止变成了运行状态。

Linux 两组信号对比

linux之前关闭信号,Linux 两组信号对比(关闭和停止进程信号)相关推荐

  1. 前后两组结构相同的数据进行比较,找出新增的,需要删除的,原来存在的

    想象现在服务器在向客户端发送数据,每隔几秒发送一次数据,客户端需要将前后两次的数据进行对比,找出相对于收的数据需要将上一次的数据删除的部分,以及此次新增加的,还有原来就已经存在的数据. 代码如下: v ...

  2. 同期对比图_Excel展示两组同期数据,这种左右对比图真好看,只需六步搞定

    Excel数据展示过程中,一幅好的图表不仅仅代表的是美观,而且也能更加显而易见的看清楚数据的情况.对两组同期数据做对比图,这种情况相信大家都见到过. 相信许多同学在进行这样的两组数据对比的时候,一般都 ...

  3. oracle 每月同期对比,两年数据同期对比表_月份对比表格怎么做

    同期及上期数据对比处理示例.sql --雇员数据CREATE TABLE Employee( ID int, --雇员编号(主键) Name nvarchar(10), --雇员名称Dept nvar ...

  4. linux线程关闭信号,Linux/UNIX用同步方法处理异步信号

    一. 前言 Linux/UNIX进程信号处理复杂易出错,而用在多线程中就更加复杂脆弱,这里不探讨相关历史渊源,只给出一种在实践中简单可靠的信号处理方式.后文讨论的线程模型是POSIX thread(p ...

  5. linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国

    原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...

  6. linux 之进程信号

    1       信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...

  7. 【Linux系统编程】Linux信号列表

    00. 目录 文章目录 00. 目录 01. Linux信号编号 02. 信号简介 03. 特殊信号 04. 附录 01. Linux信号编号 在 Linux 下,每个信号的名字都以字符 SIG 开头 ...

  8. 【Linux系统编程】Linux 信号列表

    在 Linux 下,每个信号的名字都以字符 SIG 开头,每个信号和一个数字编码相对应,在头文件 signum.h 中,这些信号都被定义为正整数.信号名定义路径:/usr/include/i386-l ...

  9. Linux 进程信号:信号的概念、生命周期、产生流程、阻塞

    信号的概念 信号的生命周期 信号的阻塞 信号的概念 信号 信号是一个软中断.操作系统通过信号通知某个进程发生了某件事件,然后中断这个进程当前操作,让它优先去处理这个事件. 我们在linux下常用的ki ...

最新文章

  1. PHP设计模式之访问者模式
  2. 开篇有益-解析微软微服务架构eShopOnContainers(一)
  3. Axure RP 第一部分
  4. 网站排名和权重骤降的原因是什么?又该如何处理?
  5. php7与php5的区别,PHP7和PHP5区别
  6. Python为何如此优秀?斯坦福教授告诉你!
  7. Android下的junit 单元测试
  8. JDK中DNS缓存的分析
  9. 上银伺服驱动器说明书_威海伺服驱动器维修,诚信互利
  10. 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“条件变量”
  11. eversync safari_印象笔记 Evernote 同步插件 for WordPress
  12. 十六、that的用法汇总
  13. python知识点总结2
  14. html点击按钮弹出悬浮窗_html弹窗,html网页弹窗代码
  15. java实现xls转换为xlsx
  16. fiddler拦截模拟器中app的请求设置方法
  17. Android8.1 源码修改之插入SIM卡默认启用Volte功能
  18. AndroidQ(10)黑暗模式适配
  19. Python 那么火,到底可以用来做什么?我们来说说 Python3 的主要应用
  20. 权益法编制合并报表及实例

热门文章

  1. 找不到wifi信号,但是连得上热点?
  2. hello(javac不是内部或外部命令)
  3. html 网页 立方米m³ n次幂 乱码问题
  4. 西门子SMART200PLC通讯程序集合。 根据工程实践整合200SMART支持的各种通讯,包括和第三方如开放式ISO和TCP的服务器和客户端
  5. 基于单片机的波形发生器,可以发送正弦、三角、锯齿和方波,可以支持调频和调幅,能够提供相关设计说明。
  6. 优质杀毒软件_优质科学软件的标志
  7. 客户资源怎么找:一文带你了解大数据获客方式,不再担心找不到客户资源
  8. React 基础案例 | 可折叠的问题列表和按分类展示的美食菜谱(三)
  9. 木色世界android版本,我的木筏世界手游下载-我的木筏世界安卓版下载v1.0-魅卓网...
  10. Minecraft源码分析(3) - 刷怪笼(MobSpawner)逻辑