视频地址:
http://player.bilibili.com/player.html?aid=31289365&bvid=BV1iW411d7hd&cid=83959860&page=15
课件地址:
对应于书中的8.5-8.8。
处理器根据异常号调用对应的异常处理程序,来处理异常。用户通过系统调用来执行内核的函数。当信号传递给进程时,调用信号处理程序来对信号进行响应。
父进程和子进程处于相似但独立的地址空间中,它们对变量的操作都是互相独立的。
要确定信号传递给了那个进程,以及该进程对应的全局变量值。
信号可能在任何位置返回,不要对代码有任何假设,要确保在代码之间尽量消除竞争
信号处理程序与主程序在相同进程中并发执行,所以具有相同的上下文。
信号发送的对象是进程
这里介绍一下shell程序的内容。实际上系统上的进程呈现为层次结构
当你启动系统时,第一个创建的进程是init
进程,它的PID为1,系统上其他所有进程都是init
进程的子进程。init
进程启动时会创建守护进程(Daemon),该进程一般是一个长期运行的程序,通常用来提供服务,比如web服务等其他你想要一直在系统上运行的服务。然后init
进程还会 创建登录进程,即登录shell(Login Shell),它为用户提供了命令行接口,所以当你登录到一个Linux系统,最终得到的是一个登录shell。
然后登录shell会以你的身份来执行程序,比如我们输入ls
命令,即要求shell运行名为ls
的可执行程序,则shell会创建一个子进程,在该子进程中执行ls
程序,而该子进程也可能创建其他的子进程。
所以shell就是就是一个以用户身份来运行程序的应用程序。在Linux中的默认shell叫做bash。