缺少 GNU Linux (Arch Linux) 上的 SIGINFO

Rob*_*ann 14 linux signals glibc

我正在开发一个应用程序,我希望它根据需要将一些运行时统计信息打印到控制台。kill我立刻想到了信号。

阅读Wiki 上的Unix 信号SIGINFO似乎是要走的路,因为:

  • 旨在为这些目的
  • 如果未实现信号处理程序,则不终止进程(与SIGUSRx- 请参阅此处相反)

但是,通过检查 的输出kill -l,似乎我的服务器没有实现此信号。

我的问题是:

  1. 为什么SIGINFO我的系统上没有?它在所有 GNU Linux 系统上都不存在吗?
  2. 有没有一种简单的(即没有内核/glibc 重新编译)方法来启用这个信号?如果没有,那么困难的方法是什么?
  3. 如果目标进程不处理,我可以使用哪些替代信号用于我的目的,不会引起任何副作用?(我已经假设没有,因为我在glibc的手册上找不到任何其他合适的信号)

Linux元信息:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

更新:我仍在寻找有关为什么此信号被有条件地排除在 BSD 之外的其他系统之外的更多信息(请参阅下面的评论)。该信号似乎对许多用途都非常有用,所以我很难相信这只是一个心血来潮的问题 - 那么这个信号在 Linux 上的真正表现是什么?

eic*_*hin 5

有人讨论(早在 linux 0.x-1.x 时代)就添加了这个(因为它在 BSD 系统上很有用),但如果我没记错的话,当时在 Linux 上做正确的事情比在 BSD 上更难是有原因的。

请注意,您所询问的只是该功能的一小部分(即,您正在谈论stty infocontrol-T 的一个条目,导致内核将SIGINFO其交付给 的tty进程组) - 该部分很“简单” -但是当内核处理信号时,让内核报告有关进程状态的信息(因为当时很少有东西对此有任何支持,该功能主要是关于“这个进程是旋转还是挂起”和“什么进程是无论如何”)更难 - ISTR 甚至存在关于准确显示该信息的安全/信任问题,以及它是否应该与安全注意密钥路径相关联。也就是说,仅发送信号的“简单”版本可能有一些价值......

(根据个人记忆;快速的网络搜索不会发现任何明显的内容,但我认为人们必须深入挖掘非常古老的档案才能找到讨论。)