开发者

How to trigger SIGUSR1 and SIGUSR2?

开发者 https://www.devze.com 2023-03-08 21:44 出处:网络
I\'m getting acquainted with signals in C. I can\'t figure out wha开发者_JS百科t kind of signals SIGUSR1 and SIGUSR2 are and how can I trigger them. Can anyone please explain it to me?They are user-de

I'm getting acquainted with signals in C. I can't figure out wha开发者_JS百科t kind of signals SIGUSR1 and SIGUSR2 are and how can I trigger them. Can anyone please explain it to me?


They are user-defined signals, so they aren't triggered by any particular action. You can explicitly send them programmatically:

#include <signal.h>

kill(pid, SIGUSR1);

where pid is the process id of the receiving process. At the receiving end, you can register a signal handler for them:

#include <signal.h>

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

signal(SIGUSR1, my_handler);


terminal 1

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

terminal 2

killall -SIGUSR1 dd

go back to terminal 1

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


They are signals that application developers use. The kernel shouldn't ever send these to a process. You can send them using kill(2) or using the utility kill(1).

If you intend to use signals for synchronization you might want to check real-time signals (there's more of them, they are queued, their delivery order is guaranteed etc).

0

精彩评论

暂无评论...
验证码 换一张
取 消