c - 为什么信号在 Linux 中依赖于平台?

标签 c linux linux-kernel signals posix

SIGNAL(7)手册页指出:

The numeric value for each signal is given in the table below. As shown in the table, many signals have different numeric values on different architectures
...

的确如此。在 Linux 内核源代码中,我们可以确保 f.e.与 SIGTERM - 这里有一堆用于不同架构的 signal.h 文件。

那么,如果是操作系统级别,与硬件没有明确的关系,为什么会有这样的平台依赖性呢?为什么 Linux 不能在所有支持的平台上平等地处理它?<​​/p>

附:这个post没有帮助。

最佳答案

许多不应该依赖于平台的东西也是如此:ioctl 数字、系统调用数字、fcntl 数字、stat 和 sysv ipc 结构,mmap flags 等等等等等等。原因是历史错误。

早期,Linux 将每个平台的定义建模在当时使用的主要现有专有 unix 上。对一些人来说,曾经尝试过真正能够从专有的 unix 运行二进制文件,并且在极少数情况下,有一段时间,它有点工作。其余的只是对精力和技术债务的巨大浪费。即使在它确实有效的地方,这些旧系统也早已不复存在。

现代 Linux 在某种程度上弥补了这一点,对所有新系统调用使用统一编号,对新类型统一 asm-generic 定义等。但所有遗留包袱仍然存在。

关于c - 为什么信号在 Linux 中依赖于平台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253894/

相关文章:

android - android内核模式获取完整包名

c++ - 我们可以使用 pthread 库进行 opencv C++ 编程吗?

c - 如何在C程序中找到函数的结束地址?

linux - 记录终端命令

linux - PID 哈希表条目 : 4096 (order: 12, 32768 字节)?

linux - 操作系统和内核是不同的东西吗?

c - a1,a2...a10 等于每个元素并对元素进行计数

c - 获取窗口客户区的宽度和高度

linux - tar 命令选项有多大

c++ - 我的程序如何附加正在运行的程序?就像 gdb 一样。在 Linux 中