【发布时间】:2011-05-29 15:40:18
【问题描述】:
我开始熟悉 C 语言中的信号。我不知道SIGUSR1 和SIGUSR2 是什么类型的信号以及如何触发它们。谁能给我解释一下?
【问题讨论】:
我开始熟悉 C 语言中的信号。我不知道SIGUSR1 和SIGUSR2 是什么类型的信号以及如何触发它们。谁能给我解释一下?
【问题讨论】:
它们是用户定义的信号,因此它们不会被任何特定操作触发。您可以以编程方式显式发送它们:
#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);
【讨论】:
SIGUSR1 用于AIO 的示例:linux.die.net/man/7/aio
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
【讨论】:
rsync error: received SIGUSR1 (code 19) at main.c(1434) [sender=3.1.1]
rsync 一起工作,它只是一个应用程序示例(此处为:dd),它为SIGUSR1 设置一个信号处理程序以获得有用的功能。
它们是应用程序开发人员使用的信号。内核不应该将这些发送到进程。您可以使用kill(2) 或使用实用程序kill(1) 发送它们。
如果您打算使用信号进行同步,您可能需要检查实时信号(信号更多、排队、交货顺序有保证等)。
【讨论】: