간단한 코드 처리기를 코드에 넣었습니다. 신호를 잡는 핸들러 함수를 사용하여 구조체를 초기화했습니다.UNIX/Linux 신호 처리 : SIGEV_THREAD
코드가 작동하지 않는 이유를 지적 할 수 있습니까? 이론적으로 신호가 있으면 처리기를 호출해야합니다. 그러나 그렇지 않습니다.
이 제발 도와주세요, 감사 Kingsmasher1이
enter code here
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <time.h>
void my_handler(int sival_int, void* sival_ptr)
{
printf("my_handler caught\n");
signal(sig,my_handler);
}
int main()
{
struct sigevent sevp;
sevp.sigev_notify=SIGEV_THREAD;
sevp.sigev_signo=SIGRTMIN;
sevp.sigev_value.sival_ptr=NULL;
sevp.sigev_notify_function=(void*)my_handler;
kill(0,SIGRTMIN); // This should invoke the signal and call the function
}
하지만 OP는 'sigevent' **로 논리적으로 문제가되지 않아야합니다. 따라서 +1해야합니다. –
이 메소 나는 알고 있지만, 나는 sigevent를 사용하고 SIGEV_THREAD를 사용하여 함수를 호출하려고합니다. 만약 당신이 저를 도울 수 있다면, 그것은 위대 할 것입니다. – kingsmasher1
문서를 통한 짧은 트롤에서 당신이 가진 문제는 시그널 핸들링이 아니라 시그널 핸들링에 관한 것입니다. sigevent가 async io (aio man 페이지 참조)와 같은 용도로 사용되는 동안 SIGRTMIN 신호가 프로세스에서 수신 될 때마다 새 스레드에서 신호 처리기를 호출하려는 것처럼 들립니다. 당신은 signal()에 대한 문서를보고 당신이 할 수있는 것을보기 위해 당신의 OS가 그것을 지원한다면 sigaction()을 필요로한다. – Jackson