zoukankan      html  css  js  c++  java
  • 信号_信号的发送与接收_core文件

    信号的发送与接收

    (1)发送

      一般来说,大多数发送信号的原因,都是因为内核、硬件发生了某些事件时,才会向某个进程发送该事件专用的信号,告诉该进程这个事件发生了。

      不过对于我们自己写的进程来说,其实更多的是接收信号,而不是发送信号。

      我们自己发送信号的原因无非如下几种情况:

      (a)Ctrl+C、Ctrl+发送信号,终止正在运行的进程

      (b)命令执行kill命令发送信号,终止跑飞的进程,通常都是发送15这个信号

        15这个信号的名字是SIGTERM,TERM就是terminal的缩写,其实就是命令行终端的意思。

        当无法使用Ctrl+C、Ctrl+来终止进程时,往往使用Kill命令来终止进程。

        那么什么样的进程会使用Ctrl+C、Ctrl+来终止呢?

        只有当进程占有命令行终端时,才能使用Ctrl+C、Ctrl+来终止。

      (c)因为某些特殊需求,往往在我们自己的程序里面,需要调用kill函数向另一个进程发送某个信号。

        什么特殊需求呢?

          比如A进程和B进程需要协同工作,A进程将相应时间准备好以后,可能需要发送一个信号给B进程,通知B进程,B进程接收到信号后,就知道该事件已经准备好,可以配合A进程做事了。

        至于说自己写的进程发送什么信号合适呢?

          其实发送哪一种信号都行,但是我们说几乎每一种信号都有自己特定的用途。

          所以我们自己的程序在发送信号是,如果发送给别人专用时间信号的话,这样就显得很不正规,而且很可能造成误会。比如我的A进程给另一个进程发送一个SIGSEGV信号,B进程还以为发生了指针错误事件,其实发生的并不是指针错误时间,而是其他事件,这就造成了理解的错误。

        因此自己进程调用kill函数发送信号时,我们可以发送的是SIGUSER1、SIGUSER2这两个自定义信号,所谓自定义就是,信号所代表的事件,可以由程序员自己根据实际情况来规定。

    (2)接收

      对于我们自己写的进程来说,最常见的信号操作还是接收信号。不过在一般情况下,我们的进程并不会去重新设置信号的处理方式,而是使用信号的默认处理方式来处理信号。

      虽然很少重新设置信号的处理方式,但是总还是有这种需求的,所以我们后面会介绍,如何调用API重新设置信号的处理方式。

    (3)core文件

      1) 什么是core文件

      用于保存程序(进程)在当前结束的这一刻,进程在内存中的代码和数据,core文件可以用于分析进程在结束时的状况,不过由于进程代码和数据都是二进制的,所以把core文件直接打开后我们是看不懂的,一般需要特殊软件翻译后才能看懂。

      2)并不是所有的信号在终止进程时都会产生core文件

      只有某些信号在终止时才会产生core文件,不过一般情况下并不会创建这个文件,因为系统默认将产生core的设置给关闭了,只有打开这个设置后才会保存core文件。

      所以你看到提示core dumped,这就标识这个信号终止进程时,会产生core文件,只不过由于关闭了设置,因此core文件被丢弃了,dumped就是丢弃的意思。

      演示

        例子1:Ctrl+ 发送SIGQUIT信号

        例子2:操作错误地址

      3)如果你不想丢弃core文件怎么办?

      对相关的系统文件进行设置即可,core文件一般默认保存在当前路径下。

      由于core在实际开发中基本用不到(除非某些特殊的场合),所以我们这里不再深入介绍core文件。

  • 相关阅读:
    简便的将DataSet导入到数据库中
    数据类型的小小研究:Access与SQL Server的数据类型
    【jxust acm 20120708】
    【D ECJTU_ACM 11级队员2012年暑假训练赛(2)】
    【hdu 2101 A + B Problem Too】
    【hdu 1014】
    【hdu 1164 Eddy's research I】
    【开始,安全编程】
    【hdu 1285 确定比赛名次】
    【hdu 1163 Eddy's digital Roots 】
  • 原文地址:https://www.cnblogs.com/doitjust/p/12622633.html
Copyright © 2011-2022 走看看