Я знаком с сигналами в C. Я не могу понять, какие сигналы SIGUSR1
и SIGUSR2
есть и как я могу их запускать. Может кто-нибудь объяснить это мне?
Как запустить SIGUSR1 и SIGUSR2?
Ответ 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