Unix 执行程序并终止程序时发出信号并中断
我想更好地理解UNIX操作系统中的信号和中断机制。据我所知,中断用于CPU和操作系统内核之间的通信。信号用于操作系统内核和操作系统进程之间的通信 我很难理解在某些场景中发生了什么,找到调用哪些信号和中断以及何时调用 例如,当执行一个程序并使用Unix 执行程序并终止程序时发出信号并中断,unix,linux-kernel,signals,Unix,Linux Kernel,Signals,我想更好地理解UNIX操作系统中的信号和中断机制。据我所知,中断用于CPU和操作系统内核之间的通信。信号用于操作系统内核和操作系统进程之间的通信 我很难理解在某些场景中发生了什么,找到调用哪些信号和中断以及何时调用 例如,当执行一个程序并使用kill-pid终止它时。在shell中键入程序名时会触发哪些中断(例如pluma然后kill pluma_id) 我尝试在调用kill命令时使用strace。执行的第一个命令是:execve(“/bin/kill”、[“kill”、“10057”]、[/*
kill-pid
终止它时。在shell中键入程序名时会触发哪些中断(例如pluma
然后kill pluma_id
)
我尝试在调用kill
命令时使用strace
。执行的第一个命令是:execve(“/bin/kill”、[“kill”、“10057”]、[/*47 cars*/])=0
据我所见,这是一个标准的系统调用,但我无法理解当键盘按键按下事件发生时,触发了哪些中断以及发送了哪些信号。我也无法理解在使用kill
syscall终止进程时,哪些信号被发送到了进程(可能根本没有发送?)
以下场景中发生的事件(信号、SISAL和中断)的完整序列是什么:
羽流
pluma
kill pluma\u id
(简明的描述就足够了,只是为了理解一般流程)在
kill
下面(程序)使用的是kill()
系统调用,并且此系统调用始终以信号号作为参数
命令kill
只是假设默认情况下发送某些信号,例如:TERM
signal。您看到的strace
输出是程序调用。您应该更深入地查看跟踪,并找到调用系统调用的位置。然后你会看到信号的数值
我想你应该看看
kill
程序文档。如果没有明确指定信号,它会提到默认情况下将哪个信号发送给进程。它还向您展示了如何发送特定的信号,如果您愿意的话。在shell中键入羽流
键盘中断发生。CPU接收键盘中断、执行处理程序、读取键码和扫描码等。在/dev/input/event*中生成的事件将由终端仿真器程序读取或由输入系统转发到程序。涉及到您的桌面环境、Xserver等
点击回车键并执行pluma
同上。收到enter键后,shell将使用fork()和exec()命令
执行kill pluma\u id
Shell进程进行kill()系统调用。我的kill手册说“kill的默认信号是TERM。使用-l或-l列出可用的信号”。在进行系统调用时,将有一个上下文切换。验证权限后,内核将找到指定进程ID的进程表条目。它将使用pluma已接收的信号号更新PTE中进程的信号掩码
因此,信号被传送到进程。现在,进程需要处理信号。如果它为特定信号安装了信号处理程序,则会调用该处理程序。否则内核将执行默认的handler/操作。在unix系统中,进程的信号处理通常发生在上下文切换期间,即当进程切换回用户上下文时,或当进程再次被调度时
Maurice J.Bach设计的UNIX操作系统对整个过程有非常简单和详细的解释。你可能想看看