【发布时间】:2023-03-22 20:25:01
【问题描述】:
我有一个共享资源,表示 Web 服务器的请求统计信息,该服务器在接受调用以处理客户端连接后分叉。当父进程捕获某个信号时,我想将这些统计信息打印到 stderr,但是 stats 结构受信号量保护,我知道由于死锁而在信号处理程序中锁定/解锁信号量是一个坏主意问题。我试图在 sig 处理程序中设置一个标志,并在设置标志时从父进程打印统计信息,方法是在 accept() 之后首先检查 EINTR,然后检查标志,但这不起作用。有什么想法吗?
【问题讨论】:
-
所以我似乎找到了解决办法。基本上通过使用 sigaction() 关闭系统调用的自动重启并检查 EINTR 的 accept() 的返回值似乎有效。
标签: c signals semaphore signal-handling