如何触发SIGUSR1和SIGUSR2?

时间:2011-05-29 15:40:19

标签: c signals

我熟悉C中的信号。我无法弄清楚SIGUSR1SIGUSR2是什么类型的信号,我怎么能触发它们。有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:63)

它们是用户定义的信号,因此它们不会被任何特定操作触发。您可以通过编程方式显式发送它们:

#include <signal.h>

kill(pid, SIGUSR1);

其中pid是接收进程的进程ID。在接收端,您可以为它们注册信号处理程序:

#include <signal.h>

void my_handler(int signum)
{
    if (signum == SIGUSR1)
    {
        printf("Received SIGUSR1!\n");
    }
}

signal(SIGUSR1, my_handler);

答案 1 :(得分:6)

它们是应用程序开发人员使用的信号。内核不应该将这些发送到进程。您可以使用kill(2)或使用实用程序kill(1)发送它们。

如果您打算使用信号进行同步,您可能需要检查实时信号(其中有更多信号,它们排队,保证其交货顺序等)。

答案 2 :(得分:5)

终端1

dd if=/dev/sda of=debian.img

终端2

killall -SIGUSR1 dd

返回终端1

34292201+0 records in
34292200+0 records out
17557606400 bytes (18 GB) copied, 1034.7 s, 17.0 MB/s