什么是待处理信号?

什么是待处理信号?

当查看正在运行的进程的限制时,我看到

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

一般来说,我似乎找不到解释每个限制是什么的页面。有些是非常不言自明的(最大打开文件数),有些则不那么明显(最大消息队列大小)。

答案1

根据手册页sigpending

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

因此,它意味着等待进程退出D(不间断睡眠)状态的信号(sigterm、sigkill、sigstop...)。通常,进程在等待 I/O 时就处于该状态。睡眠不能被打扰。即使 sigkill ( kill -9) 也不能,内核会等待直到进程唤醒(信号等待传递这么长时间)。

对于其他不清楚的值,我会看看手册页limits.conf

答案2

进程限制由 setrlimit(2) 控制

所以你可以查看它的联机帮助页:

RLIMIT_SIGPENDING(自 Linux 2.6.8 起)

指定可以为调用进程的真实用户 ID 排队的信号数量限制。为了检查此限制,标准信号和实时信号都会被计数。但是,该限制仅针对 sigqueue(3) 强制执行;始终可以使用kill(2) 对尚未排队到进程的任何信号的一个实例进行排队。

一般来说,当您查看系统调用的手册页时,您可以获得最详细的信息。 C是UNIX/Linux的母语。

相关内容