执行程序并杀死它时的信号和中断

问题描述:

我想更好地理解UNIX操作系统中的信号和中断机制。据我了解,中断用于CPU和操作系统内核之间的通信。信号用于在OS内核和OS进程之间进行通信。执行程序并杀死它时的信号和中断

我很难理解在某些情况下发生了什么,并且发现哪些信号和中断正在被调用以及何时发生。

例如,执行程序并使用kill pid将其杀死时。在shell中输入程序的名称时会触发哪些中断(例如pluma,然后是kill pluma_id)?

我试过在调用kill命令时使用strace。执行的第一个命令是:execve ("/bin/kill", ["kill", "10057"], [/* 47 cars */]) = 0

据我所知,这是一个标准的系统调用,但我无法理解哪些中断被触发,哪些信号在发生键盘按键事件时发送。我也无法理解哪些信号在使用kill系统调用终止时被发送到进程(可能根本没有发送?)。

什么是发生在以下情形事件(信号,sisals和中断)的全序列:

  1. 在shell中键入plume
  2. 点击回车键执行pluma
  3. 执行kill pluma_id

(简要说明绰绰有余,只是了解一般流程)

打字羽在外壳发生

键盘中断。 CPU接收键盘中断,执行处理程序,读取键码和扫描代码等。/ dev/input/event *中生成的事件将由终端仿真器程序读取,或将由您的程序转发给程序输入系统。涉及您的桌面环境,Xserver等。

击中输入键和执行pluma

同上。在收到输入密钥后,shell将fork()和exec()pluma。

执行杀pluma_id

壳牌工艺使得杀灭()系统调用。我的kill手册中提到“kill的默认信号是TERM,使用-l或-L列出可用信号”。进行系统调用时会有上下文切换。核实权限后,内核会找到指定进程ID的进程表条目。它将更新信号编号pluma收到的PTE过程的信号掩码。

因此信号被传递给过程。现在该过程需要处理信号。如果它为特定的信号安装了一个信号处理程序,处理程序会被调用。否则内核会采用默认的handeler/action。在unix系统中,进程的信号处理通常发生在上下文切换期间,即当进程切换回用户上下文或再次调度进程时。

Maurice J. Bach设计的UNIX操作系统对整个过程进行了非常简单和详细的说明。你可能想看看它。

使用的kill(该程序)下面是一个kill()系统调用,并且此系统调用总是获取一个信号编号作为参数。

命令kill只是假定某些信号是默认发送的,例如:TERM信号。你看strace输出是程序调用。您应该更深入地了解跟踪,并找到系统调用的调用方式。然后你会看到信号的数值。

你应该看看我认为的kill程序文档。它提到了默认情况下发送给进程的信号,如果你没有明确指定信号的话。如果您愿意,它还会告诉您如何发送特定信号。