gpt4 book ai didi

linux - 信号&系统调用使用&关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:18 26 4
gpt4 key购买 nike

我学过一段时间的linux编程,我知道signalsystem call是完全不同的概念。

在我看来,system call是内核对外提供的接口(interface),signal是让进程从内核或其他进程接收信息的机制。他们对我来说是一种逆向过程。

我理解正确吗?

我的问题是:

这两个概念之间有更深或更简单的关系吗?

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

最佳答案

系统调用是用户空间和内核空间之间的交汇点。当需要做一些更复杂的事情时,这就是正常的用户级代码陷入内核空间的方式 - 从设备读取、写入设备、更改硬件配置、发送网络数据包,应有尽有。

基本上,用户代码通过系统调用与内核交互;调用系统调用是向内核请求服务。这样做时,会生成一个“唤醒”内核的中断。这称为陷入到内核空间。

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

您可以为用户保留的信号(例如 SIGUSR1SIGUSR2)设置自定义处理程序,并用它们做任何您喜欢的事情。您可以在 sigsuspend(2)sigaction(2)(和一个标志)的帮助下使用信号编写基本的父/子同步机制。您可以使用 SIGKILL 终止无响应的进程(尽管建议您先尝试 SIGTERM 以使其有机会正常终止)。

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

关于linux - 信号&系统调用使用&关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32708830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com