Linux 信号集解析 —— 理解操作系统核心(linux信号集)

Linux 信号集解析是操作系统核心的理解困难的一个部分,它也是实现系统进程间的通信的重要工具。在操作系统内核中,进程可以通过发送信号实现交互。下面我们来简要了解 Linux 信号。

在 Linux 中,信号以低级硬件模拟事件的方式被传递,它们有 32 种,以 SIG 开头(Signal)。信号包括:

SIGINT,一般由用户通过使用Ctrl + C产生;

SIGSEGV,Segmentation Fault,一般由应用程序破坏内存保护发送;

SIGCHILD,子进程结束运行;

SIGSTOP,停止进程;

SIGUSR1 和SIGUSR2,响应由用户应用程序发送的信号;

SIGKILL,杀死一个进程,不可捕获;

Linux 信号在内核中是以位掩码的形式进行存储,每个信号都会被标记为 128 位的 long 类型的整数,这种类型的变量可以表示 32 个可用状态,也就是 32 个信号。用下面的代码可以查看当前 Linux 系统中存在的信号:

#include 
int main()
{
for (int sig = 1; sig
{
printf("Signal %d :%s", sig, sys_siglist[sig]);
}
return 0;
}

当进程收到某个信号后,内核会对该进程采取什么样的操作。比如说,当收到 SIGINT 信号时,内核将终止该进程;当收到 SIGCHLD 信号时,内核将释放该进程的资源;当接收到 SIGSTOP 信号时,内核将把其挂起。

内核也提供了信号处理的机制,进程可以在运行时设置对各种信号的不同处理方法,以增强对信号的控制能力,我们可以使用如下代码:

#include 
int main(){
signal(SIGSTOP, SIG_IGN);
signal(SIGINT, SIG_DFL);
return 0;
}

以上代码可以忽略 SIGSTOP 信号,忽略 SIGINT 信号。至此,我们简要讲述了 Linux 信号集的基本概念和使用,也更好的理解了操作系统核心的相关内容。


数据运维技术 » Linux 信号集解析 —— 理解操作系统核心(linux信号集)