programing

SIGUSR1 및 SIGUSR2를 트리거하는 방법

newsource 2022. 7. 30. 19:21

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

터미널 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

애플리케이션 개발자가 사용하는 신호입니다.커널은 이것들을 프로세스로 전송해서는 안 됩니다.다음 방법으로 보낼 수 있습니다.kill(2)또는 유틸리티를 사용하여kill(1).

동기화에 신호를 사용하는 경우 실시간 신호를 확인할 수 있습니다(신호 수가 더 많거나, 대기열에 있거나, 전달 순서가 보장되는 등).

언급URL : https://stackoverflow.com/questions/6168636/how-to-trigger-sigusr1-and-sigusr2