Подтвердить что ты не робот

Как запустить SIGUSR1 и SIGUSR2?

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

4b9b3361

Ответ 1

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

#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);

Ответ 2

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

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

Ответ 3

терминал 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