信号(1)

来源:互联网 发布:达梦数据库6下载 编辑:程序博客网 时间:2024/06/05 02:26
  • 信号是软中断,信号提供了一种异步处理事件的方法

  • 概念

    信号都被定义为正整数常量,在头文件signal.h中定义.
    不存在编号为0的信号

  • 信号产生

    1. 用户按某些终端键时,引发终端产生的信号。(ctrl+c产生SIGINT信号)
    2. 硬件异常产生信号(除数为0,无效的内存访问(产生SIGSEGV信号)等),这些条件有硬件检测到,并通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。
    3. 进程调用kill函数可以将任意信号发送给另一个进程或进程组。(接收信号的进程和发送信号的进程的所有者必须相同,或发送信号进程的所有者必须是超级用户)
    4. kill命令发送信号,常用于终止一个失去控制的后台进程
    5. 当检测到某种软件条件已经发生,并应将其通知有关进程时也产生信号。(如:SIGURG:在网络连接上传来带外的数据;SIGPIPE:(在管道的读进程终止后,一个进程写此管道);SIGALARM:(进程所设置的定时器已经超时))
  • 信号产生时的处理

    1. 忽略 大多数信号可使用这种方式处理,但有2种信号不允许忽略处理(SIGKILL和SIGSTOP)
    2. 执行系统默认动作 大多数信号的系统默认动作是终止进程
    3. 捕捉处理 SIGKILL和SIGSTOP不能被捕捉
  • 信号列举

信号 说明 描述 默认动作 SIGABRT 异常终止(abort) 调用abort()函数,进程异常终止 终止+core SIGALRM 定时器超时(alarm) alarm()函数或者setitimer()函数超时 终止 SIGBUS 硬件故障 终止+core SIGCANCEL 线程库内部使用 忽略(linux无此信号) SIGCHLD 子进程状态改变 忽略 SIGCONT 使暂停进程继续 继续/忽略 SIGEMT 硬件故障 终止+core SIGFPE 算术异常 终止+core SIGHUP 连接点断开 终止 SIGILL 非法硬件指令 终止+core SIGINT 终端终端符 终止 SIGIO 异步IO 终止/忽略 SIGIOT 硬件故障 终止+core SIGKILL 终止 终止 SIGPIPE 写至无读进程的管道 终止 SIGPOLL 可轮询事件(poll) 终止 SIGPROF 梗概时间超时(setitimer) 终止 SIGPWR 电源失效/重启 终止/忽略 SIGQUIT 终端退出符 终止+core SIGSEGV 无效内存访问 终止+core SIGSTKFLT 协处理器栈故障 终止+core SITSTOP 停止 停止进程 SIGSYS 无效系统调用 终止+core SIGTERM 终止 终止 SIGTRAP 硬件故障 终止+core SIGTSTP 终端停止符 停止进程 SIGTTIN 后台读控制tty 停止进程 SIGTTOU 后台写向控制tty 停止进程 SIGURG 紧急情况(套接字) 忽略 SIGUSR1 用户定义信号 终止 SIGUSR2 用户定义信号 终止 SIGVTALRM 虚拟时间闹钟 终止 SIGWINCH 窗口大小改变 忽略 SIGXCPU 超过cpu限制(setrlimit) 终止+core SIGXFSZ 超过文件长度限制(setrlimit) 终止+core SIGXRES 超过资源限制 忽略
原创粉丝点击