课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的程序员都在学习Linux编程开发知识,而今天我们就一起来了解一下,Linux编程中的信号类型与作用分析。
信号是UNIX系统先开始使用的进程间通信机制,因为Linux是继承于UNIX的,所以Linux也支持信号机制,通过向一个或多个进程发送异步事件信号来实现,信号可以从键盘或者访问不存在的位置等地方产生;信号通过shell将任务发送给子进程。
进程可以选择忽略发送过来的信号,但是有两个是不能忽略的:SIGSTOP和SIGKILL信号。SIGSTOP信号会通知当前正在运行的进程执行关闭操作,SIGKILL信号会通知当前进程应该被杀死。除此之外,进程可以选择它想要处理的信号,进程也可以选择阻止信号,如果不阻止,可以选择自行处理,也可以选择进行内核处理。如果选择交给内核进行处理,那么就执行默认处理。
操作系统会中断目标程序的进程来向其发送信号、在任何非原子指令中,执行都可以中断,如果进程已经注册了新号处理程序,那么就执行进程,如果没有注册,将采用默认处理的方式。
例如:当进程收到SIGFPE浮点异常的信号后,默认操作是对其进行dump(转储)和退出。信号没有优先级的说法。如果同时为某个进程产生了两个信号,则可以将它们呈现给进程或者以任意的顺序进行处理。
下面我们就来看一下这些信号是干什么用的
SIGABRT和SIGIOT
SIGABRT和SIGIOT信号发送给进程,告诉其进行终止,这个信号通常在调用C标准库的abort()函数时由进程本身启动
SIGALRM、SIGVTALRM、SIGPROF
当设置的时钟功能超时时会将SIGALRM、SIGVTALRM、SIGPROF发送给进程。当实际时间或时钟时间超时时,发送SIGALRM。当进程使用的CPU时间超时时,将发送SIGVTALRM。当进程和系统代表进程使用的CPU时间超时时,将发送SIGPROF。
SIGBUS
SIGBUS将造成总线中断错误时发送给进程
SIGCHLD
当子进程终止、被中断或者被中断恢复,将SIGCHLD发送给进程。此信号的一种常见用法是指示操作系统在子进程终止后清除其使用的资源。
SIGCONT
SIGCONT信号指示操作系统继续执行先前由SIGSTOP或SIGTSTP信号暂停的进程。该信号的一个重要用途是在Unixshell中的作业控制中。
SIGFPE
SIGFPE信号在执行错误的算术运算(例如除以零)时将被发送到进程。
SIGUP
当SIGUP信号控制的终端关闭时,会发送给进程。许多守护程序将重新加载其配置文件并重新打开其日志文件,而不是在收到此信号时退出。
SIGILL
SIGILL信号在尝试执行非法、格式错误、未知或者特权指令时发出
SIGINT
当用户希望中断进程时,操作系统会向进程发送SIGINT信号。用户输入ctrl-c就是希望中断进程。
SIGKILL
SIGKILL信号发送到进程以使其马上进行终止。与SIGTERM和SIGINT相比,这个信号无法捕获和忽略执行,并且进程在接收到此信号后无法执行任何清理操作,下面是一些例外情况
僵尸进程无法杀死,因为僵尸进程已经死了,它在等待父进程对其进行捕获
处于阻塞状态的进程只有再次唤醒后才会被kill掉
init进程是Linux的初始化进程,这个进程会忽略任何信号。
SIGKILL通常是作为后杀死进程的信号、它通常作用于SIGTERM没有响应时发送给进程。
SIGPIPE
SIGPIPE尝试写入进程管道时发现管道未连接无法写入时发送到进程
SIGPOLL
当在明确监视的文件描述符上发生事件时,将发送SIGPOLL信号。
SIGRTMIN至SIGRTMAX
SIGRTMIN至SIGRTMAX是实时信号
SIGQUIT
当用户请求退出进程并执行核心转储时,SIGQUIT信号将由其控制终端发送给进程。
SIGSEGV
当SIGSEGV信号做出无效的虚拟内存引用或分段错误时,即在执行分段违规时,将其发送到进程。
SIGSTOP
SIGSTOP指示操作系统终止以便以后进行恢复时
SIGSYS
当SIGSYS信号将错误参数传递给系统调用时,该信号将发送到进程。
SYSTERM
我们上面简单提到过了SYSTERM这个名词,这个信号发送给进程以请求终止。与SIGKILL信号不同,该信号可以被过程捕获或忽略。这允许进程执行良好的终止,从而释放资源并在适当时保存状态。SIGINT与SIGTERM几乎相同。
SIGTSIP
SIGTSTP信号由其控制终端发送到进程,以请求终端停止。
SIGTTIN和SIGTTOU
当SIGTTIN和SIGTTOU信号分别在后台尝试从tty读取或写入时,信号将发送到该进程。
SIGTRAP
在发生异常或者trap时,将SIGTRAP信号发送到进程
SIGURG
当套接字具有可读取的紧急或带外数据时,将SIGURG信号发送到进程。
SIGUSR1和SIGUSR2
SIGUSR1和SIGUSR2信号被发送到进程以指示用户定义的条件。
SIGXCPU
当SIGXCPU信号耗尽CPU的时间超过某个用户可设置的预定值时,将其发送到进程
SIGXFSZ
当SIGXFSZ信号增长超过大允许大小的文件时,该信号将发送到该进程。
SIGWINCH
SIGWINCH信号在其控制终端更改其大小(窗口更改)时发送给进程。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。