CSAPP——第八章异常控制流

发布时间:2023年12月17日

父进程回收子进程:wait()??

不回收:变成僵尸进程,内存泄漏

  • 按下 ctrl + c 终止前台作业
  • 按下 ctrl + z 停止/挂起前台作业

SIGINT:终止前台程序,等价于ctr + c

SIGKILL:

SIGSEGV:段故障

SIGALARM

SIGCHLD:子进程停止或终止

负的PID会导致信号被发送到进程组PID中的每个进程

接收信号:由内核模式切换为用户模式时检查信号,还是在内核时检查

8.4 进程控制

8.4.1 获取进程ID

获取进程ID:
pid_t getpid(void)

获取父进程ID:
pid_t getppid(void)

8.4.2 创建和终止进程

进程状态:

运行

停止/挂起:SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU

终止:1. 收到一个信号,信号默认行为是终止? 2. 从主程序返回? 3. 调用exit

void exit(int status);

父进程调用 fork 创建一个新的运行的子进程:

pid_t fork(void);

fork 函数:调用一次,返回两次:

父进程中:返回子进程的PID
子进程中:返回 0

父进程和子进程并发执行

进程图

进程图特别有助于理解带嵌套 fork 调用的程序

8.4.3 回收子进程

当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除。相反,进程被保持在一种已终止的状态中,直到被它的父进程回收(reaped)。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程,从此时开始,该进程就不存在了。一个终止了但还未被回收的进程称为僵死进程(zombie)。

父进程终止,内核会安排 init 进程成为其孤儿进程的养父,并回收其僵死子进程。init 进程:PID为 1 ,不会终止,是所有进程的祖先。

父进程回收子进程:wait 或 waitpid

wait:等待子进程退出,没有就一直等待。也是一种同步的方式。信号:异步的方式。

一个进程可以通过调用 waitpid 函数来等待它的子进程终止 或者 停止:

waitpid:等待特定的子进程

pid_t waitpid(pid_t pid, int * statusp, int options);

8.4.4 进程休眠

8.4.5 加载并运行程序

execve:在当前进程上下文中加载并运行一个新程序

execve:加载并运行程序

fork 函数和 execve 函数的区别???????

8.5 信号

信号:通知进程系统中发生了某种类型的事件。
信号提供了一种机制,通知用户进程发生了这些异常。(内核发送信号给用户进程)

待处理信号:发出而未被接收的信号。任何时刻,一种类型至多只会有一个待处理信号。

8.5.1 发送信号 看不懂思密达

发送信号原因:

1. 内核检测到一个系统事件

2. 一个进程调用了 kill 函数,显式地要求内核发送一个信号给目的进程(可以是自己)

用 kill 函数发送信号

pid 大于0:kill 函数发送信号 sig 给进程 pid

pid 等于0:kill 函数发送信号 sig 给进程所在进程组中的每个进程,包括调用进程

pid 小于0:kill 函数发送信号 sig 给进程组 | pid | 中的每个进程

8.5.2?接收信号

接收信号包括:忽略信号,终止,执行信号处理程序捕获信号

信号处理程序:

捕获信号:调用信号处理程序

处理信号:执行信号处理程序

8.6 非本地跳转

C语言提供一种用户级异常控制流形式:非本地跳转,将控制直接从一个函数转移到另一个当前正在执行的函数,不需要经过调用-返回序列。

非本地跳转通过 setjmp 和 longjmp 函数提供

setjmp:存档

longjmp:读档

非本地跳转:在多层跳转中直接跳转到最外层的部分

考试只考一个点:

setjmp:被调用一次,返回多次

longjmp:被调用一次,从不返回

fork :调用一次,返回两次

exit :调用一次,从不返回

?非本地跳转的重要应用

1. 允许从一个深层嵌套的函数调用中立即返回,通常是检测到某个错误情况引起的,如果在一个深层嵌套的函数调用中发现一个错误情况,我们可以使用非本地跳转直接返回到一个普通的本地化错误程序。

2. 另一个重要应用是使一个信号处理程序分支到一个特殊的代码位置,而不是返回到被信号到达中断了的指令的位置。

默认行为/信号处理函数:进程终止,进程挂起/停止,进程忽略该信号

信号处理程序:

1. 设置信号处理程序

2. 捕获信号

3. 处理信号

?

待处理信号:pending

?非本地跳转??????????54:00

2-6 OS,重点:3,5,第4章:难理解,考题有限制

7-10 OS,重点:9,7/8:难理解,考得少

9,6章联系图像 小部件

万字详解普遍操作系统进程七态与Linux进程七态-CSDN博客

文章来源:https://blog.csdn.net/weixin_53432918/article/details/134881347
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。