Linux 信号及;系统调用的使用和维护;关系

Linux 信号及;系统调用的使用和维护;关系,linux,signals,system-calls,Linux,Signals,System Calls,我学习linux编程已经有一段时间了,我知道信号和系统调用是完全不同的概念 据我所知,系统调用是内核提供给外部的接口,信号是让进程从内核或其他进程接收信息的机制。他们对我很友好 我理解正确吗 我的问题是: 这两个概念之间有深层的或更简单的关系吗 这似乎是一个愚蠢的问题,但有时我会把它们混在一起,我需要仔细思考以区分它们。我试图得到一个简单的意见来帮助我理解它们之间的关系和区别。用户空间程序和内核之间的公共通信通道是由系统调用提供的。但有一个不同的通道,即信号通道,在用户进程之间以及从内核到用户进

我学习linux编程已经有一段时间了,我知道
信号
系统调用
是完全不同的概念

据我所知,
系统调用
是内核提供给外部的接口,
信号
是让进程从内核或其他进程接收信息的机制。他们对我很友好

我理解正确吗

我的问题是: 这两个概念之间有深层的或更简单的关系吗


这似乎是一个愚蠢的问题,但有时我会把它们混在一起,我需要仔细思考以区分它们。我试图得到一个简单的意见来帮助我理解它们之间的关系和区别。

用户空间程序和内核之间的公共通信通道是由系统调用提供的。但有一个不同的通道,即信号通道,在用户进程之间以及从内核到用户进程之间使用


您可以在

系统调用是用户空间和内核空间的交汇点中阅读更多关于信号的信息。这就是当需要做一些更复杂的事情时,用户级代码如何进入内核空间——从设备读取、写入设备、更改硬件配置、发送网络数据包等等

所以基本上,用户代码通过系统调用与内核交互;调用系统调用是对内核的服务请求。在执行此操作时,会生成一个中断来“唤醒”内核。这被称为进入内核空间的陷阱

另一方面,信号是一种独立且不同的通信机制。内核使用信号异步通知用户进程各种事件(在某些情况下,I/O可用、无效内存访问尝试或非法指令等),但它们也在进程之间使用:如果您拥有正确的权限,您可以从一个用户空间进程向另一个用户空间进程发送信号

您可以为用户保留的信号(如
SIGUSR1
SIGUSR2
)设置自定义处理程序,并使用它们执行任何您喜欢的操作。您可以使用signals在
sigsupspend(2)
sigaction(2)
的帮助下编写基本的父/子同步机制。您可以使用
SIGKILL
终止无响应的进程(尽管建议您首先尝试
SIGTERM
以使其有机会正常终止)


所以,你看,可能性是无穷的。系统调用是对内核的服务请求,遵循严格定义的API,并允许您进入和离开内核模式进行管理操作。信号更像是一种通用的进程通信机制,内核也碰巧使用它来通知用户进程,但还有其他用途。

信号本身就是一个系统call@kkk我所说的
signal
不是指函数,内核中大约有31种不同类型的
signal
,对吧?确切地说,软件生成的中断是一个“陷阱”,处理方式与硬件“中断”不同。见: