📅  最后修改于: 2023-12-03 15:22:28.237000             🧑  作者: Mango
在操作系统中,信号是一种事件,它通常用于通知进程发生了某个特定的事件,比如收到了某个信号。在Unix-like系统中,信号是一种软件中断,与硬件中断不同。在本文中,我们将介绍Linux中的信号基本类型。
Linux中的信号是一个整数,表示发送的信号编号。在Linux中,信号编号从1开始到64结束,其中一些信号是固定的,而其他则可以被用户定义(信号值从1到31)。信号的编号定义在/usr/include/asm-generic/signal.h
头文件中。
Linux中共有64种信号。其中比较常用的有:
SIGTERM
:终止进程。该信号通常由管理员发送给进程以请求其正常终止。SIGKILL
:强制终止进程。该信号不能被进程捕获或阻止,在进程收到该信号后会立即终止。SIGHUP
:挂起进程。当进程的终端关闭时,该信号通常会被发送。SIGINT
:中断进程。当用户在控制台上按下Ctrl+C
时,该信号通常会被发送。当进程接收到信号时,可以执行以下操作之一:
signal
函数并将处理程序设置为SIG_IGN
来实现。signal
函数并将处理程序设置为一个自定义的函数指针来实现。信号可以通过以下方式传递:
有时,我们不希望在接收到某个信号时立即执行信号处理程序。此时,我们可以将该信号添加到阻塞信号集中,该信号集由通过调用sigprocmask
函数设置。阻塞信号集中的信号在进程接收到信号前不会被处理。
有时,我们希望在某些情况下忽略信号。此时,我们可以将该信号添加到信号屏蔽集中,该信号集由通过调用sigprocmask
函数设置。信号屏蔽集中的信号在进程接收到信号前不会被处理。
当进程接收到多个相同的信号时,这些信号将被合并成一个信号。如果进程阻塞了该信号,则所有合并的信号将被排队等待处理。否则,只有一个信号将被处理,其他将被忽略。
printf
之类的函数,因为它们不是可重入的。