1.信号和中断
中断:从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。
信号:发送给进程的请求,将进程从正常执行转移到中断处理。
中断的分类:
(1)人员中断
(2)进程中断
(3)硬件中断
(4)进程的陷阱错误
2.Unix/Linux信号
(1)按Ctrl+C组合键通常会导致当前运行的进程终止。原因如下:Ctrl+C组合键会生成一个键盘硬件中断。键盘中断处理程序将Ctrl+C组合键转换为SIGINT(2)信号,发送给终端上的所有进程,并唤醒等待键盘输入的进程。在内核模式下,每个进程都要检查和处理未完成的信号。进程对大多数信号的默认操作是调用内核的kexit(exitValue)函数来终止。在Linux中,exitValue的低位字节是导致进程终止的信号编号。
(2)用户可使用nohup a.out&命令在后台运行一个程序。即使在用户退出后,进程仍将继续运行。
(3)用户再次登录时也许会发现(通过ps-u LTD)后台进程仍在运行。用户可以使用sh命令kill pid(orkill-s9pid)杀死该进程。
3.Unix/Linux中的信号处理
(1)信号类型
defineSIGHUP1
defineSIGINT2
defineSIGQUIT3
defineSIGILL4
defineSIGTRAP5
defineSIGABRT6
defineSIGIOT6
defineSIGBUS7
defineSIGFPE8
defineSIGKILL9
defineSIGUSR110
defineSIGSEGV11
defineSIGUSR212
defineSIGPIPE13
defineSIGALRM14
defineSIGTERM15
defineSIGSTKFLT16
defineSIGCHLD17
defineSIGCONT18
defineSIGSTOP19
defineSIGTSTP20
defineSTGTTTN21
defineSIGTTOU22
defineSIGURG23
defineSIGXCPU24
defineSIGXFSZ25
defineSIGVTALRM26
defineSIGPROF27
defineSIGWINCH28
defineSIGPOLL29
defineSIGPWR30
defineSIGSYS31
(2)信号的来源
*来自硬件中断的信号:中断键、间隔定时器、其他硬件错误;
*来自异常的信号;
*来自其他进程的信号。
(3)PROC
PROC有一个32位向量,用于记录发送给进程的信号。
还有一个MASK位向量,用于屏蔽相应的信号。
都有一个信号处理数组。
4.信号处理步骤
(1)当某进程处于内核模式时,会检查信号并处理未完成的信号。如果某信号有用户安装的捕捉函数,该进程会先清除信号,获取捕捉函数地址,对于大多数陷阱信号,则将已安装的捕捉函数重置为DEFault。
(2)重置用户安装的信号捕捉函数:用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误。
(3)信号和唤醒:在Unix/Linux内核中有两种SLEEP进程;深度休眠进程和浅度休眠进程。前一种进程不可中断,而后一种进程可由信号中断。
5.信号与异常
(1)作为进程异常的统一处理方法:当进程遇到异常时,它会陷入内核模式,将陷阱原因 转换为信号编号,并将信号发送给自己。如果在内核模式下发生异常,内核只打印一 条PANIC错误消息,然后就停止了。如果在用户模式下发生异常,则进程通常会终 止,并以内存转储进行调试。
(2)让进程通过预先安装的信号捕捉函数处理用户模式下的程序错误。这类似于MVS [IBM MVS]中的 ESPIE 宏。
(3)在特殊情况下,它会让某个进程通过信号杀死另一个进程。注意,这里所说的杀死并 不是直接杀死某个进程.而只是向目标进程发出“死亡”请求 为什么我们不直接杀 死某个进程呢?(提示:瑞士银行有大量无人认领的匿名账户。)
6.Linux中的IPC
IPC是指用于进程间通信的机制。在Linux中,IPC包含以下组成部分
(1)管道和FIFO
(2)信号
(3)System V IPC
(4)POSIX消息队列
(5)线程同步机制
(6)套接字