linux 进程通信之 信号

Posted xiaoshiwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 进程通信之 信号相关的知识,希望对你有一定的参考价值。

一,管道PIPE

二,FIFO通信

三,mmap通信

四,信号的概念

信号的特点:简单,但不能携带大量的信息,满足特定条件就会发生

信号的机制:进程B发送信号给进程A。信号是由内核来处理的。

信号的产生:

  • 按键产生:ctrl+c,ctrl+z,ctrl+
  • 调用系统函数后产生:kill,raise,abort等
  • 定时器产生:alarm,setitimer
  • 命令产生:kill等
  • 由于硬件错误产生:非法访问内存(段错误),除0(浮点数错误),内存对齐错误(总线错误),fd已经关闭了还调用write函数时,产生SIGPIPE错误。

信号的状态:

  • 产生
  • 递达:信号到达了,并且处理完了
  • 未决:产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。

信号的默认处理方式:

  • 忽略
  • 执行默认动作
  • 捕获

信号的4要素:

  • 编号

  • 事件

  • 名称

  • 默认处理动作

    • 忽略

    • 终止

    • 终止并产生core文件

    • 暂停

    • 继续

    • 下面是英语:

         Term   Default action is to terminate the process.
         Ign    Default action is to ignore the signal.
         Core   Default action is to terminate the process and  dump  core  (see
                core(5)).
         Stop   Default action is to stop the process.
         Cont   Default  action  is  to  continue the process if it is currently
                stopped.

用man 7 signal可以查看详细的信息

下面是从man 7 signal里考出来的linux常规信号一览表,value里有3列的,看中间的数字,中间的数字代表linux

       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating-point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers; see pipe(7)
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
       SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

中文解释:

1) SIGHUP: 当用户退出shell时,由该shell启动的所有进程将收到这个信号,默认动作为终止进程
2) SIGINT:当用户按下了<Ctrl+C>组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动
作为终止进程。
3) SIGQUIT:当用户按下<ctrl+\\>组合键时产生该信号,用户终端向正在运行中的由该终端启动的程序发出些信
号。默认动作为终止进程。
4) SIGILL:CPU检测到某进程执行了非法指令。默认动作为终止进程并产生core文件
5) SIGTRAP:该信号由断点指令或其他 trap指令产生。默认动作为终止里程 并产生core文件。
6) SIGABRT: 调用abort函数时产生该信号。默认动作为终止进程并产生core文件。
7) SIGBUS:非法访问内存地址,包括内存对齐出错,默认动作为终止进程并产生core文件。
8) SIGFPE:在发生致命的运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为0等所有的算法错误。默认动作为终止进程并产生core文件。
9) SIGKILL:无条件终止进程。本信号不能被忽略,处理和阻塞。默认动作为终止进程。它向系统管理员提供了可以杀死任何进程的方法。
10) SIGUSE1:用户定义 的信号。即程序员可以在程序中定义并使用该信号。默认动作为终止进程。
11) SIGSEGV:指示进程进行了无效内存访问。默认动作为终止进程并产生core文件。
12) SIGUSR2:另外一个用户自定义信号,程序员可以在程序中定义并使用该信号。默认动作为终止进程。
13) SIGPIPE:Broken pipe向一个没有读端的管道写数据。默认动作为终止进程。
14) SIGALRM: 定时器超时,超时的时间 由系统调用alarm设置。默认动作为终止进程。
15) SIGTERM:程序结束信号,与SIGKILL不同的是,该信号可以被阻塞和终止。通常用来要示程序正常退出。执行shell命令Kill时,缺省产生这个信号。默认动作为终止进程。
16) SIGSTKFLT:Linux早期版本出现的信号,现仍保留向后兼容。默认动作为终止进程。
17) SIGCHLD:子进程结束时,父进程会收到这个信号。默认动作为忽略这个信号。
18) SIGCONT:如果进程已停止,则使其继续运行。默认动作为继续/忽略。
19) SIGSTOP:停止进程的执行。信号不能被忽略,处理和阻塞。默认动作为暂停进程。
20) SIGTSTP:停止终端交互进程的运行。按下<ctrl+z>组合键时发出这个信号。默认动作为暂停进程。
21) SIGTTIN:后台进程读终端控制台。默认动作为暂停进程。
22) SIGTTOU: 该信号类似于SIGTTIN,在后台进程要向终端输出数据时发生。默认动作为暂停进程。
23) SIGURG:套接字上有紧急数据时,向当前正在运行的进程发出些信号,报告有紧急数据到达。如网络带外数据到达,默认动作为忽略该信号。
24) SIGXCPU:进程执行时间超过了分配给该进程的CPU时间 ,系统产生该信号并发送给该进程。默认动作为终止进程。
25) SIGXFSZ:超过文件的最大长度设置。默认动作为终止进程。
26) SIGVTALRM:虚拟时钟超时时产生该信号。类似于SIGALRM,但是该信号只计算该进程占用CPU的使用时间。默认动作为终止进程。
27) SGIPROF:类似于SIGVTALRM,它不公包括该进程占用CPU时间还包括执行系统调用时间。默认动作为终止进程。
28) SIGWINCH:窗口变化大小时发出。默认动作为忽略该信号。
29) SIGIO:此信号向进程指示发出了一个异步IO事件。默认动作为忽略。
30) SIGPWR:关机。默认动作为终止进程。
31) SIGSYS:无效的系统调用。默认动作为终止进程并产生core文件。
34) SIGRTMIN ~ (64) SIGRTMAX:LINUX的实时信号,它们没有固定的含义(可以由用户自定义)。所有的实时信号的默认动作都为终止进程。

信号的编号

可以使用kill –l命令查看当前系统可使用的信号有哪些。

c/c++ 学习互助QQ群:877684253

技术图片

本人微信:xiaoshitou5854

以上是关于linux 进程通信之 信号的主要内容,如果未能解决你的问题,请参考以下文章

linux 进程通信之 信号

进程间通信之-信号signal--linux内核剖析

Linux系统编程之进程间通信之浅谈信号

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步