리눅스 sigaction 예제

  • 0

리눅스 sigaction 예제

IEEE Std 1003.1-2001의 이 볼륨은 NULL 행위 인수를 제공하는 sigaction()에 대한 호출이 성공하도록 요구하며, 이는 잡히거나 무시할 수 없는 신호(즉, SIGKILL 또는 SIGSTOP)의 경우에도 성공합니다. 시스템 V 신호() 및 BSD 시그벡() 함수는 이러한 경우 [EINVAL]을 반환하며, 이러한 점에서 동작은 시그액션()에서 다릅니다. sig에 대한 이전 작업이 signal()에 의해 설정된 경우 oact가 가리키는 구조에서 반환되는 필드의 값은 지정되지 않으며, 특히 oact-> sa_handler는 반드시 signal()에 전달된 동일한 값이 아닙니다. 그러나, 동일한 구조 또는 이의 사본에 대한 포인터가 행위 인수를 통해 시그액션()에 대한 후속 호출로 전달되는 경우, 신호의 처리는 신호() 에 대한 원래 호출이 반복된 것처럼 되어야 한다. sa_sigaction에 siginfo_t 매개 변수는 다음과 같은 요소와 구조체 동일한 신호에 프로세스 내에서 동시에 sigaction() 및 sigwait() 함수의 사용의 결과 지정 되지 않습니다. 일부 아키텍처에서 공용 구조는 sa_handler 와 sa_sigaction 모두에 할당하지 않습니다. IEEE Std 1003.1-2001의 이 볼륨은 ISO C 표준 신호() 함수에 의해 설정된 신호 동작을 적절하게 저장하고 복원해야 합니다. 그러나 그 반대가 사실이라는 보장은 없으며, 시그액션 구조에 의해 전달되는 더 많은 양의 정보를 받을 수 없습니다. 이 때문에 응용 프로그램은 동일한 프로세스에서 동일한 신호에 대해 두 함수를 모두 사용하지 않아야 합니다. 범용 라이브러리 루틴의 경우 항상 피할 수 없으므로 항상 sigaction()으로 구현해야 합니다.

SA_SIGINFO가 sa_flags에 지정된 경우 sa_sigaction(sa_handler 대신)은 signum에 대한 신호 처리 함수를 지정합니다. 이 함수는 신호 번호를 첫 번째 인수로, siginfo_t를 두 번째 인수로 포인터로, ucontext_t에 대한 포인터를 세 번째 인수로 받습니다. sigaction() 함수는 signal() 함수를 대체하므로 기본 설정에 사용해야 합니다. 특히, 시그액션() 및 시그널()은 동일한 신호를 제어하기 위해 동일한 공정에서 사용해서는 안 된다.