什么是待处理信号?


9

在查看运行过程的限制时,我看到

Max pending signals       15725
  • 这是什么?
  • 如何确定繁忙服务的合理价值?

通常,我似乎找不到找到说明每个限制是什么的页面。有些是不言自明的(最大打开文件数),有些则很少(最大msgqueue大小)。


在最新的Arch Linux内核3.14.37-1-lts zsh上,我得到了sigpending 31603。为什么这些限制如此怪异(即不是2的幂)?
Bruce Ediger

Answers:


6

按照手册页sigpending

sigpending()返回等待传递给调用线程的信号集(即,被阻塞时引发的信号)。

因此,这意味着一直等待直到过程退出D(不间断睡眠)状态的信号(sigterm,sigkill,sigstop等)。通常,进程在等待I / O时处于该状态。睡眠不能被打断。甚至sigkill(kill -9)都不能,内核会等到进程唤醒(信号等待发送的时间很长)。

对于其他不清楚的价值观,我会采取在看看手册页limits.conf


这对手册页sigqueuesetrlimit你真的应该看。
JdeBP

0

流程限制由setrlimit(2)控制

因此,您可以查看其联机帮助页:

RLIMIT_SIGPENDING(从Linux 2.6.8开始)

指定可以排队等待呼叫过程的真实用户标识的信号数量的限制。标准和实时信号均被计数,以检查此限制。但是,此限制仅对sigqueue(3)强制;始终可以使用kill(2)对尚未排队到进程中的任何信号的一个实例进行排队。

通常,查看syscall的联机帮助页时,可以获得最详细的信息。C是UNIX / Linux的母语。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.