Как активировать SIGUSR1 и SIGUSR2? - PullRequest
47 голосов
/ 29 мая 2011

Я знакомлюсь с сигналами в C. Я не могу понять, что это за сигналы SIGUSR1 и SIGUSR2 и как я могу их вызвать.Может кто-нибудь объяснить, пожалуйста, мне?

Ответы [ 3 ]

68 голосов
/ 29 мая 2011

Это определяемые пользователем сигналы, поэтому они не инициируются каким-либо конкретным действием.Вы можете явно отправить их программно:

#include <signal.h>

kill(pid, SIGUSR1);

, где pid - это идентификатор процесса получения.На приемном конце вы можете зарегистрировать обработчик сигнала для них:

#include <signal.h>

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

signal(SIGUSR1, my_handler);
6 голосов
/ 29 мая 2011

Это сигналы, которые используют разработчики приложений. Ядро никогда не должно отправлять их процессу. Вы можете отправить их, используя kill(2) или используя утилиту kill(1).

Если вы собираетесь использовать сигналы для синхронизации, возможно, вы захотите проверить сигналы в реальном времени (их больше, они в очереди, их порядок доставки гарантирован и т. Д.)

5 голосов
/ 27 января 2017

терминал 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...