【问题标题】:Why signals are platform-dependent in Linux?为什么信号在 Linux 中依赖于平台?
【发布时间】:2019-12-09 17:33:57
【问题描述】:

SIGNAL(7) 手册页状态:

下表给出了每个信号的数值。作为 如表所示,许多信号在 不同的架构
...

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

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

附:这个post 没有帮助。

【问题讨论】:

  • 如链接帖子中所述,这是历史性的——最初 linux 试图通过二进制方式与每种架构上的主要 UNIX 风格兼容,一旦设置了信号编号,它们就不能在不破坏二进制兼容性的情况下进行了更改。
  • @ChrisDodd 唯一的原因是遗留问题? “最初 linux 正在尝试..” - 但是 Linux 现在正在尝试吗?
  • @z0lupka Linux 的目标是never break userspace
  • 为什么没有帮助?

标签: c linux linux-kernel signals posix


【解决方案1】:

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

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

现代 Linux 已经在一定程度上解决了这个问题,对所有新的系统调用使用统一编号,对新类型使用统一的 asm-generic 定义等。但所有遗留包袱仍然存在。

【讨论】:

  • 说得好。我希望有一些方法可以解决这些错误——我们现在必须处理它们。
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 2014-11-27
  • 2017-04-28
  • 1970-01-01
  • 2016-05-05
相关资源
最近更新 更多