嗨,有人知道如何发送信号SIGUSR1/2而不丢失到另一个pid吗?
问题是当我将kill(pid,SIGUSR1)放入一个while循环时,我的另一个程序只接收到其中的很少一个,它似乎有一个损失,我必须在两个kill()调用之间等待。
实际上,我被迫在我的循环中使用usleep(),以便接收我发送的所有SIGUSR信号。
我想尽快收到所有的信。
谢谢。
最佳答案
您需要使用sigaction()
而不是signal()
,因为sigaction()
可以在处理当前信号时控制哪些信号被阻塞。此外,接收器必须处理接收到的每个信号;这与发送信号相比成本相对较高,因此您的killer(信令)进程可以轻松地超过“killed”(接收)进程。你应该想想为什么你需要发送这么多信号。它们是一种在特殊情况下使用的机制。